【发布时间】:2020-11-15 22:37:27
【问题描述】:
我们提供了一份文档,其中介绍了如何使用自定义策略设置保持登录 (KMSI): https://docs.microsoft.com/en-us/azure/active-directory-b2c/custom-policy-keep-me-signed-in
好的,太好了,所以我们现在知道如何使用(非常复杂的)XML 策略文件来为复选框设置一些 UI。 但这实际上在做什么?这方面的信息在哪里?
- 是否为客户提供了一个新的 ID Token 而无需重新认证?
- 是否提供了新的 auth_code?li>
- 是否使用了隐藏的 i-frame?
- 如何从客户端应用程序实际调用/完成刷新? (SPA)
- 是否需要往返 B2C 并且它只是不向用户询问信用并将其重定向回应用程序?或者应用程序是否能够使刷新请求完全 UI/UX 静默?如果是这样,怎么做? API在哪里?是否需要 MSAL.js 中的内容?
- 为什么仅限本地?如果 B2C 是“中间人”IDP,并且它发行的代币是它自己的(当然实际上不是来自社交账户),那么为什么它不能以这种方式为 all 账户刷新代币类型(本地或社交)?
我的理解是,对于隐式授予,存储刷新令牌是不可能的,因此保留一个会话 cookie 并使用它通过 i-frame 和prompt=none 获取一个新会话是一个能够保持会话 cookie 已更新且当前。
这是前 MS(现为 Auth0)身份专家 Vittorio 的文章: https://auth0.com/blog/oauth2-implicit-grant-and-spa/
他提到了 Refresh Token Rotation 的“更新访问令牌”。这被描述为:
“一种使刷新令牌无效并发出新令牌的功能 每当它用于刷新访问令牌时”
这似乎是通过会话 cookie 和 i-frame “hack”(与 Implicit Grant 一起使用的)完成的,它返回一个新的授权代码,该代码(大概)可用于获取新的访问令牌。
当我们现在有 PKCE 时为什么需要这样做? 显然,即使使用 PKCE,在浏览器中存储长期存在的刷新令牌仍然很糟糕。我发现undocumented information B2C Refresh Tokens for SPA max life is 24 hours(不是 90 天,not configurable)。
那么我们今天还在做这个会话 cookie 隐藏 i-frame hack 吗?即使是PKCE?这就是 B2C KMSI 正在做的事情吗?如果是这样,它是如何触发的,我的应用程序实际上如何获得一个新的访问令牌以用于我的 API?
底线:我需要让我的用户保持签名并能够访问我的安全 Web API 而无需重新授权,即使他们 100 多天没有再次打开我的应用程序。理想情况下,这应该完全静默完成,无需往返,无论帐户是本地帐户还是 IDP 方面的社交帐户。 B2C KMSI 功能是否是正确的机制?
【问题讨论】:
标签: azure-ad-b2c refresh-token pkce