我在 .net 4.5 中创建了一个 MVC 4 应用程序并安装了身份和访问工具,以便我可以创建一个声明感知应用程序。我配置了应用程序,使其使用 2012 附带的新 LocalSTS,因此它不会像 2010 年那样创建 STS 网站。
如何在我的应用程序中支持注销方案?有没有我可以调用的方法FormsAuthentication.SignOut
?
我在 .net 4.5 中创建了一个 MVC 4 应用程序并安装了身份和访问工具,以便我可以创建一个声明感知应用程序。我配置了应用程序,使其使用 2012 附带的新 LocalSTS,因此它不会像 2010 年那样创建 STS 网站。
如何在我的应用程序中支持注销方案?有没有我可以调用的方法FormsAuthentication.SignOut
?
将 cookie 更改为持久性 cookie 并在注销单击或会话结束时使 fedauth cookie 过期怎么办?
RP 上的持久 Cookie:
<microsoft.identityModel>
<federatedAuthentication>
<wsFederation
persistentCookiesOnPassiveRedirects="true" />
<cookieHandler
persistentSessionLifetime="60.0:0:0" />
</federatedAuthentication>
</microsoft.identityModel>
并让 Cookie 过期
var c = Request.Cookies["FedAuth"];
c.Expires = DateTime.Now.AddDays(-1);
Response.Cookies.Add(c);
c = Request.Cookies["FedAuth1"];
c.Expires = DateTime.Now.AddDays(-1);
Response.Cookies.Add(c);
在此之后您将需要重定向。
这真的很简单,只需调用 WSFederationAuthenticationModule 上的 SignOut 方法即可:
FederatedAuthentication.WSFederationAuthenticationModule.SignOut("/MyPostSignoutRedirectUrl");
要处理注销请求,请执行以下步骤:
点击退出链接后,清除联合cookie:System.Web.HttpContext.Current.Response.Cookies.Remove(stateKey);
使用 WS-Federation 退出参数作为操作将浏览器重定向到模拟颁发者:
https://RelyingParty/SsoLogout.aspx?wa=wsignout1.0&wreply=...
WS-Federation 命令——wa=wsignout1.0 用于从颁发者注销。
https://RelyingParty1/SsoLogout.aspx?wa=wsignoutcleanup1.0,
https://RelyingParty2/SsoLogout.aspx?wa=wsignoutcleanup1.0,
https://RelyingParty3/SsoLogout.aspx?wa= wsignoutcleanup1.0
这允许所有依赖方执行注销操作。
它的工作方式如下:
wa GET 参数中定义的 wsignout1.0 和 wsignoutcleanup1.0 操作很容易被遵守 WS-Federation Passive Requestor Profile 的依赖方理解。这些操作允许从领域中的所有 RP 执行注销操作。