【发布时间】:2020-10-24 02:02:57
【问题描述】:
设置
我有一个基于 IdentityServer4 的身份提供者,并将 AD FS 作为外部身份提供者。
我有 3 种不同类型的客户:
- 基于 OWIN lib 的生产混合流客户端
- 一个测试混合流客户端(来自 IdentityServer4 存储库的最新示例客户端)
- 隐式流客户端(Angular)
问题
测试客户端和隐式流客户端按预期工作。 从 OWIN 客户端注销时,用户会从我的 IdP 中注销,但不会从 AD FS 中注销。
一些分析
从 OWIN 客户端注销时,从 AD FS 注销时不会发送 cookie。因此,AD FS 不会删除任何 cookie,因此用户在 AD FS 上保持登录状态。
最终原因是对应的请求是无法发送cookie的xhr请求(另见SAML logout request is not sending cookies to IdP,虽然我们不使用SAML)。
总结一下你可以在浏览器中观察到的调用:
-
请求 GET https://myidp/connect/endsession
查询参数 post_logout_redirect_uri=https://xxx, id_token_hint=xxx, x-client-SKU=ID_NET45, x-client-ver=5.5.0.0
响应重定向到 https://myidp/account/logout?logoutId=xxx -
请求 GET https://myidp/account/logout
查询参数 logoutId=xxx
响应重定向到 https:// myadfs/oauth2/logout?post_logout_redirect_uri=xxx&id_token_hint=xxx&state=xxx&x-client-SKU=ID_NETSTANDARD2_0&x-client-ver=5.5.0.0 -
请求 GET https://myadfs/oauth2/logout
请求类型 xhr
查询参数 post_logout_redirect_uri=xxx, id_token_hint=xxx , state=xxx, x-client-SKU=ID_NETSTANDARD2_0, x-client-ver=5.5.0.0
响应好的
对于 OWIN 客户端,最后一次调用是 xhr 类型,对于其他客户端,它是文档类型。我认为从客户端到 myidp 的初始调用中的某些内容必须不同,例如重定向链以 xhr 请求结束。这是什么东西?我该如何改变这种行为?
我仔细检查了每个电话的标题。对我来说,最怀疑的是 Sec-Fetch-Headers(其余的对于所有客户端来说几乎是平等的),但我不明白它们实际上在做什么。
对于 OWIN 客户端:
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
对于其他客户:
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
感谢任何提示!
【问题讨论】:
-
看起来像是 SameSite cookie 或 CORS 问题?
-
@ToreNestenius 我不相信 CORS 问题。我有一个(仅用于 OWIN 客户端!)并通过配置 AD FS 来设置 CORS 标头来解决它。但是您能否进一步详细说明 SameSite cookie 问题?会发生什么?不同客户行为不同的根本原因是什么?我该如何改变它?
-
浏览器中最近的 SameSite 更改如果配置不正确,将导致在执行跨域请求时不包含 cookie。不确定这是否与您的问题有关。
标签: cookies owin identityserver4 adfs