【问题标题】:Kentor MVC Logout don't call logout urlKentor MVC 注销不调用注销 url
【发布时间】:2017-06-09 08:49:25
【问题描述】:

我对此功能有疑问。 登录操作适用于 ADFS 并返回到 AuthServices/Acs 但是注销操作不会调用 ADFS 并直接重定向到 returnUrl 参数(用提琴手检查过)。 我打电话给这个链接:/AuthServices/Logout?ReturnUrl=~/&Status=LoggedOut

web.config 是这样设置的:

  <kentor.authServices entityId="https://localhost:2181/AuthServices" returnUrl="https://localhost:2181/">
    <identityProviders>
      <add 
        entityId="https://ADFS DOMAIN/adfs/services/trust" 
        signOnUrl="https://ADFS DOMAIN/adfs/ls" 
        logoutUrl="https://ADFS DOMAIN/adfs/ls/?wa=wsignout1.0" 
        binding="HttpPost"
        allowUnsolicitedAuthnResponse="true" 
        metadataLocation="https://ADFS DOMAIN/FederationMetadata/2007-06/FederationMetadata.xml"
        wantAuthnRequestsSigned="true">
        <signingCertificate fileName="~/App_Data/*****.cer" />
      </add>
    </identityProviders>
  </kentor.authServices>

如果我在另一个选项卡上启动 https://ADFS DOMAIN/adfs/ls/?wa=wsignout1.0,它正在工作,我会从我的网站返回登录页面。

所以检索 logouturl 并发送它似乎是一个内部问题?

感谢您的帮助。

【问题讨论】:

    标签: asp.net-mvc saml-2.0 kentor-authservices


    【解决方案1】:

    在发出注销请求之前需要满足一些要求:

    1. 您需要拥有 http://kentor.se/AuthServices/LogoutNameIdentifier 声明,并且其颁发者必须与您尝试注销的 IDP 匹配。
    2. 您需要拥有http://kentor.se/AuthServices/SessionIndex 声明。
    3. 您的 AuthServices IDP 配置需要 logoutUrl(我看到您已经指定了这个,但让 AuthServices 从元数据中读取它可能更容易)
    4. 您已指定 ServiceCertificate 使用签名或两者使用(即不仅仅是加密)
    5. 您的 AuthServices IDP 配置具有 DisableOutboundLogoutRequests = false(这是默认值)

    如果您在登录期间发生了一些声明转换或者您没有保留原始的 ClaimsIdentity,则最有可能出现丢失声明(前两点)的问题。另请参阅有关 ClaimsAuthenticationManager 的文档,例如https://github.com/KentorIT/authservices/blob/master/doc/ClaimsAuthenticationManager.md

    您可以打开日志记录并查看以下哪些点失败: https://github.com/KentorIT/authservices/blob/v0.21.2/Kentor.AuthServices/WebSSO/LogOutCommand.cs#L155-L170

    【讨论】:

    • 感谢您的回复。 ADFS 不会将声明类型发送为 kentor.se/AuthServices/LogoutNameIdentifierkentor.se/AuthServices/SessionIndex。我如何设置 web.config(或者可能是 adfs)来拥有这个?但是 adfs 不在我这边。
    • ADFS 不会发送它们,但默认的 AuthServices ACS 代码会在登录期间将它们添加到身份中。我在上面的答案中添加了到 ClaimsAuthenticationManager 的链接
    • 这里也有一些讨论:github.com/KentorIT/authservices/issues/665
    • 我正在使用默认的 MVC 连接。 SignIn 流程运行良好,返回的是 AuthServices/Acs,但是 ((ClaimsIdentity)(User.Identity)).Claims 中没有添加任何内容。是否有任何默认 ClaimsAuthenticationManager 或者我应该创建一个自定义?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-07
    • 2013-08-19
    • 2020-01-21
    • 1970-01-01
    • 2017-07-06
    • 2021-11-23
    • 1970-01-01
    相关资源
    最近更新 更多