【问题标题】:ADB2C refresh token challenge not working on Chrome AndroidADB2C 刷新令牌挑战不适用于 Chrome Android
【发布时间】:2020-12-13 17:31:55
【问题描述】:

我正在使用标准 OIDC .NET 库向 ADB2C 发出质询请求。据我了解,这会自动尝试使用缓存中的刷新令牌登录并获得授权,而无需重新请求凭据。

这似乎工作得很好,除了 1 个浏览器 - Android 上的 Chrome。不管我怎么尝试,这个浏览器似乎丢失了刷新令牌,所以大约 1 小时后,它又开始要求提供凭据。我在 Chrome web/mac、edge、IE、safari、FF 上对此进行了交叉检查,它们的行为都符合预期,以保持恒定的登录状态。

有什么想法吗?这应该是独立于我所理解的浏览器,但也许我错过了一个技巧?


更新

即使在访问受 AD 保护的 Web 应用程序时,这似乎也是类似的行为。同样,Chrome 会失去刷新,但其他浏览器都可以。


更新

在令牌过期后尝试访问站点时,我在 Fiddler 中看到了这一点

设置 Cookie:x-ms-cpim-csrf=XXX;域=auth.mywebsite.com;路径=/;相同站点=无;安全的; HttpOnly

边缘

设置 Cookie:x-ms-cpim-sso:mytenant.onmicrosoft.com_0=XXX;域=auth.mywebsite.com;路径=/;相同站点=无;安全的; HttpOnly

所以是的,这是有区别的,但是为什么以及如何解决?

【问题讨论】:

标签: google-chrome openid-connect azure-ad-b2c


【解决方案1】:

这可能是 Chrome 中 SameSite cookie 的问题,导致无法按预期发送 cookie。这里有一些提示可以帮助您:

但我认为首先您应该验证这是否是 SameSite 问题,通过使用像 Fiddler 这样的工具来捕获流量并验证 cookie 确实丢失了。请在 Fiddler 中比较您不同的浏览器,看看是否存在一些差异。

请尝试使用隐身模式登录,这样您就可以在浏览器中不使用任何 cookie。然后您应该会看到您的身份提供者和您的应用程序都设置了 cookie。

在 Fiddler 中,您可以在 Filter 选项卡下启用图片中的第一项来标记设置 cookie 的响应,以便更容易检测何时设置 cookie。

【讨论】:

  • 我认为您可能是对的,这与此有关。我实际上已经实现了你提到的第一个链接,但这似乎发生在较新版本的 Chrome (v84 +) 上,那篇文章似乎主要提到了 iOS 和 safari hacks。关于如何在 Chrome 丢失 cookie 时解决此问题的信息似乎很少。有什么想法吗?
  • 更新了我的答案。
  • 您知道执行此操作所需的确切步骤,以及我要查找的特定 cookie 吗?
  • 更新了我的答案,希望这是一个可以接受的答案。
  • 谢谢。我看到身份域正在设置 cookie,它是 path=/;相同站点=无;安全的;仅限 Http。如果我现在删除 AspNetCookies(模拟过期)并转到我的应用程序中的安全端点,它确实会挑战身份,我可以看到它正在设置 cookie。我会在几个小时后重新测试,看看是否仍然如此。
猜你喜欢
  • 2015-11-03
  • 1970-01-01
  • 2015-09-29
  • 1970-01-01
  • 1970-01-01
  • 2016-10-12
  • 2019-06-29
  • 2022-10-31
  • 1970-01-01
相关资源
最近更新 更多