OWIN WS-FED身份提供者的被动注销

时间:2014-08-17 21:27:14

标签: owin katana ws-federation

所以我有一个使用Microsoft.Owin.Security.WsFederation 3.0.0-rc2的解决方案,我试图让Passive注销回拨给身份提供商以退出那里以及我的应用程序(所以我没有得到重定向循环,只需将其重新登录)。

我目前正在使用WAAD作为WS-Fed端点。

app.UseCookieAuthentication(new CookieAuthenticationOptions
{
    AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
    LoginPath = new PathString("/login")
});

app.SetDefaultSignInAsAuthenticationType(DefaultAuthenticationTypes.ApplicationCookie);

app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);

app.UseWsFederationAuthentication(new WsFederationAuthenticationOptions
{
    AuthenticationMode = Microsoft.Owin.Security.AuthenticationMode.Passive,
    AuthenticationType = WsFederationAuthenticationDefaults.AuthenticationType,
    Wtrealm = ConfigurationManager.AppSettings["WSFEDRealm"],
    MetadataAddress = ConfigurationManager.AppSettings["WSFEDMetadataAddress"]
});

如果我使用活动状态,我可以正常工作但是也可以选择使用被动状态。

我正在退出:

_authenticationManager.SignOut();

我认为它与登出助手

中的这些行有关
if (revoke.AuthenticationTypes == null || revoke.AuthenticationTypes.Length == 0)
{
    return authenticationMode == AuthenticationMode.Active ? revoke : null;
}

但我不确定如何添加到revoke.AuthenticationTypes字典?

1 个答案:

答案 0 :(得分:0)

可能的解决方案是手动强制执行signout1.0请求

var wsConfiguration = await _wsConfigurationManager.GetConfigurationAsync(HttpContext.GetOwinContext().Request.CallCancelled);
var message = new WsFederationMessage
{
    IssuerAddress = wsConfiguration.TokenEndpoint,
    Wtrealm = ConfigurationManager.AppSettings["WSFEDRealm"],
    Wreply = Url.Action("Index", "Home", null, Request.Url.Scheme),
    Wa = "wsignout1.0"
};

然后我在我的ninject模块中为wsfederation配置

进行了绑定
Bind<IConfigurationManager<WsFederationConfiguration>>().ToMethod((c) =>
{
    var owinContext = HttpContext.Current.GetOwinContext().Authentication;
        return new ConfigurationManager<WsFederationConfiguration>(ConfigurationManager.AppSettings["WSFEDMetadataAddress"]);
}).InSingletonScope();

我对此解决方案并不十分满意,因为这意味着有两个正在运行的元数据配置管理器,但它是一个可行的解决方案。