我在我的 MVC 4 应用程序中使用 ACS 2.0。
它已经配置为登录,并且适用于包括 ADFS 在内的各种提供程序。我需要实现注销功能。
这是它的样子:
// Load Identity Configuration
FederationConfiguration config = FederatedAuthentication.FederationConfiguration;
// Get wtrealm from WsFederationConfiguation Section
string wtrealm = config.WsFederationConfiguration.Realm;
string wreply = wtrealm; //return url
// Read the ACS Ws-Federation endpoint from web.Config
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();
var signoutUrl = signoutRequestMessage.WriteQueryString();
结果,我得到了我应该重定向的退出 URL,它将处理令牌并将我发回。URL 如下所示:
https://myacsnamespace.accesscontrol.windows.net/v2/wsfederation?wa=wsignout1.0&wreply=http%3a%2f%2flocalhost%3a61192%2f&wtrealm=http%3a%2f%2flocalhost%3a61192%2f
因此,它可以按预期对 Google、Yahoo 和 Microsoft 帐户运行。当我退出并尝试访问受保护区域时,我会得到一个身份提供者列表,即使我选择了相同的提供者,我也必须再次登录。
但是当我使用 ADFS 提供程序时,它的工作方式如下:
我点击退出并进入可用提供商的页面
我再次选择 ADFS 提供程序
我使用旧的 AD 凭据进入保护区
如果我将 ADFS 作为唯一的提供程序,则会跳过上面的第 2 步,并且我会不断登录而无法更改用户。
正如我看到的那样,ACS 不会处理它从 ADFS 获得的安全令牌,而是重新使用它。
您对我如何强制 ACS 处置此令牌有任何线索吗?
提前致谢!