【问题标题】:WIF Signout from within the Identity Provider从身份提供程序中注销 WIF
【发布时间】:2012-01-27 16:36:55
【问题描述】:

是否可以在不调用 RP 的情况下从身份提供者中从依赖方注销?

我在 MVC 中实现了一个自定义 STS,它在登录时向 RP 发出声明,并且我在 IP 中的注销逻辑在发出标准注销请求时工作:

 // Process signout request
 SignOutRequestMessage signOutRequestMessage = (SignOutRequestMessage)WSFederationMessage.CreateFromUri(Request.Url);
 // get response to invoke signout
 HttpResponse signOutResponse = new HttpResponse(HttpContext.Response.Output);

但是,当我尝试从 IP 内执行相同操作时,此代码不起作用。

Uri uri = new Uri(string.Format("{0}://{1}/PassiveSTS?wa=wsignout1.0",request.Url.Scheme,request.Url.Host));
// Process signout request
SignOutRequestMessage signOutRequestMessage = (SignOutRequestMessage)WSFederationMessage.CreateFromUri(uri);
// get response to invoke signout
HttpResponse signOutResponse = new HttpResponse(context.Response.Output);

【问题讨论】:

    标签: wif


    【解决方案1】:

    一旦您的 RP 验证了颁发的令牌,RP 将使用新的 cookie 建立它自己的身份验证会话,IP 无法控制该 cookie。通常,RP 通过清除此 cookie 来处理它自己的注销,SessionAuthenitcationModule.SignOut() 会这样做。

    但是,如果您希望您的 IP 结束 RP 会话,我认为您必须通过重定向来完成。

    【讨论】:

      【解决方案2】:

      为了安全地支持联合注销,您应该从身份提供者和依赖方应用程序中注销。

      每个身份提供商在身份验证 cookie 的持久性方面都不同,您需要了解您的 IDP (STS) 如何处理 Fed-Signout。

      可以在此处找到有关 ADFS 的更多信息:

      http://social.technet.microsoft.com/wiki/contents/articles/1439.ad-fs-how-to-invoke-a-ws-federation-sign-out.aspx

      如果你想欺骗这个过程,你可以确保 STS 和应用程序在同一个域中,并将 cookie 域配置为相同(使用通配符 cookie)。

      【讨论】:

        【解决方案3】:

        我们需要执行以下操作才能从 RP 和 IDP 注销

        var fedModule = FederatedAuthentication.WSFederationAuthenticationModule;

        fedModule.SignOut(true); Response.Redirect(new SignOutRequestMessage(new Uri(fedModule.Issuer), fedModule.Realm).WriteQueryString());

        【讨论】:

        • 这对我有用,干杯。身份提供者登出 url 的构造并不明显。
        猜你喜欢
        • 2018-07-22
        • 2013-05-01
        • 2021-09-18
        • 1970-01-01
        • 2015-04-16
        • 1970-01-01
        • 2017-12-13
        • 1970-01-01
        • 2015-02-23
        相关资源
        最近更新 更多