0

我对此功能有疑问。登录操作适用于 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 并发送它似乎是一个内部问题?

感谢您的帮助。

4

1 回答 1

0

在发出注销请求之前,需要满足许多要求:

  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

于 2017-06-09T12:08:12.843 回答