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