2012 年 12 月的 ACS 更新包括对联合单点注销的支持:
使用 WS-Federation 协议。使用 ACS 启用使用 WS-Federation 协议的身份提供者的单点登录 (SSO) 的 Web 应用程序现在可以利用单点注销功能。当用户退出 Web 应用程序时,ACS 可以自动将用户从身份提供者和使用相同身份提供者的其他依赖方应用程序中退出。
此功能对 WS-Federation 身份提供程序启用,包括 Active Directory 联合身份验证服务 2.0 和 Windows Live ID(Microsoft 帐户)。为了启用单点注销,ACS 为 WS-Federation 协议端点执行以下任务:
从代码示例:ASP.NET MVC 4 with Federated Sign-out 中,执行如下操作以从 ACS 中注销:
(请注意,Windows Identity Foundation 现在已合并到 .NET 4.5 框架中,这就是下面新命名空间的原因)
using System.IdentityModel.Services;
using System.IdentityModel.Services.Configuration;
public ActionResult Logout()
{
// Load Identity Configuration
FederationConfiguration config = FederatedAuthentication.FederationConfiguration;
// Get wtrealm from WsFederationConfiguation Section
string wtrealm = config.WsFederationConfiguration.Realm;
string wreply;
// Construct wreply value from wtrealm (This will be the return URL to your app)
if (wtrealm.Last().Equals('/'))
{
wreply = wtrealm + "Logout";
}
else
{
wreply = wtrealm + "/Logout";
}
// Read the ACS Ws-Federation endpoint from web.Config
// something like "https://<your-namespace>.accesscontrol.windows.net/v2/wsfederation"
string wsFederationEndpoint = ConfigurationManager.AppSettings["ida:Issuer"];
SignOutRequestMessage signoutRequestMessage = new SignOutRequestMessage(new Uri(wsFederationEndpoint));
signoutRequestMessage.Parameters.Add("wreply", wreply);
signoutRequestMessage.Parameters.Add("wtrealm", wtrealm);
FederatedAuthentication.SessionAuthenticationModule.SignOut();
string signoutUrl = signoutRequestMessage.WriteQueryString();
return this.Redirect(signoutUrl);
}