我正在使用标准OIDC .NET库向ADB 2C发出质询请求。据我所知,这会自动尝试使用缓存中的刷新令牌登录,并获得授权,而无需重新请求凭据。
这似乎工作绝对罚款,除了在1浏览器- Chrome在Android上。无论我尝试什么,这个浏览器似乎都丢失了刷新令牌,所以大约1小时后,它再次开始要求凭据。我已经在Chrome Web/Mac、Edge、IE、Safari、FF上交叉检查了这一点,它们的行为都符合预期,保持了恒定的登录状态。
有什么想法吗?这应该是浏览器独立于我所理解的,但也许我错过了一个技巧?
更新
即使在访问受AD保护的Web应用程序时,这似乎也是类似的行为。同样,Chrome失去了刷新,但其他浏览器是好的。
更新
我在Fiddler中看到了这一点,当我尝试在令牌过期后访问网站时,
Chrome
设置Cookie:x-ms-cpim-csrf=XXX; domain= auth.mywebsite.com; path=/; SameSite=None;安全; HttpOnly
Edge
设置Cookie:x-ms-cpim-sso:mytenant.onmicrosoft.com_0=XXX; domain= auth.mywebsite.com; path=/; SameSite=None;安全; HttpOnly
所以是的,有一个区别,但为什么和如何修复?
1条答案
按热度按时间pgx2nnw81#
这可能是Chrome中SameSite cookie的问题,导致cookie无法按您的预期发送。这里有一些提示可以帮助你:
但我认为首先你应该验证这是否是一个SameSite问题,通过使用像Fiddler这样的工具来捕获流量并验证cookie确实丢失了。在Fiddler中比较不同的浏览器,看看是否有一些差异。
请尝试使用匿名模式登录,这样您的浏览器中就不会有cookie。然后,您应该看到身份提供商和应用程序都设置了Cookie。
在Fiddler中,您可以在过滤器选项卡下启用图片中的第一个项目来标记设置cookie的响应,以便更容易检测何时设置cookie。
为了补充这个答案,我写了一篇博客文章,更详细地介绍了这个主题:Debugging cookie problems