1

AD FS 2.0 登录页面是一个小型 ASP.NET Web 应用程序(使用 .NET 2.0),可以对其进行自定义以更改外观和功能。(Microsoft 明确记录了此类自定义:请参阅登录页面自定义及其子页面。)

我有一个场景,其中有多个“家庭领域”(=“Claims Provider Trusts”),并且 AD FS 2.0 使用表单登录(而不是另一个“身份验证处理程序”)。

当页面HomeRealmDiscovery.aspx被点击时,该页面应该以某种方式(例如,通过询问用户)选择一个主域,然后调用SelectHomeRealm()。这通常在某些提交按钮的某些 ASP.NET 事件处理程序中完成。此时,控制权转移FormsSignIn.aspx页面。

现在在 FormsSignIn 页面上,我想使用在 HomeRealmDiscovery 页面上输入的一些数据(不直接与 AD FS 相关)。但是,我看不到获取该数据的方法。

MSDN 页面“如何:确定如何调用 ASP.NET 网页”解释了如何找出控制权是如何转移的。就我而言,我发现在 FormsSignIn 页面IsPostBack中是假的,PreviousPage是空的,并且IsCallback是假的。(也是IsCrossPagePostBack错误的。)因此,MSDN 页面建议使用“原始请求”调用 FormsSignIn 页面。但事实并非如此,因为我观察到(使用例如 Fiddler)不会通过以任何方式重定向客户端浏览器来传输控制权。所以我希望这是一个“服务器传输”,这样我就可以PreviousPage用来访问 HomeRealmDiscovery 页面实例。(我尝试使用 cookie,但这不起作用,因为浏览器不参与传输。)

因此我的问题是:如何将 AD FS 2.0 HomeRealmDiscovery.aspx 页面中的值传递到其 FormsSignIn.aspx 页面?

4

1 回答 1

2

AD FS 对 HTTP 请求进行了一些操作,因此我发现的最佳选择是使用 HttpContext Items 集合来共享数据。

因此,在 HomeRealmDiscovery 页面中,使用以下命令设置值:

var context = HttpContext.Current;

string someValue = "someValue";
ComplexObject someOtherValue = new ComplexObject();

context.Items.Add("key", someValue);
context.Items.Add("key2", someOtherValue);

然后在 FormsLoginPage 中,通过以下方式获取值:

var context = HttpContext.Current;

var value = context.Items["key"] as string;
var otherValue = context.Items["key2"] as ComplexObject;

希望这可以帮助。

于 2011-11-14T16:57:01.087 回答