Azure ad b2c Azure B2C中的KMSI实际上做什么?

Azure ad b2c Azure B2C中的KMSI实际上做什么?,azure-ad-b2c,refresh-token,pkce,Azure Ad B2c,Refresh Token,Pkce,我们拥有此文档,它解释了如何使用自定义策略设置Keep Me Sign-In(KMSI): 好的,很好,现在我们知道了如何使用(令人烦恼的复杂)XML策略文件为checkbock设置一些UI但这到底在做什么?这方面的信息在哪里 它是否在不重新验证的情况下向客户端提供新的ID令牌 它是否提供了新的身份验证代码 它是否使用隐藏的i形框架 如何从客户端应用程序实际调用/完成刷新?(水疗) 是否需要往返B2C,而不要求用户提供信用卡,并将其重定向回应用程序?或者应用程序是否能够使刷新请求完全UI/U

我们拥有此文档,它解释了如何使用自定义策略设置Keep Me Sign-In(KMSI):

好的,很好,现在我们知道了如何使用(令人烦恼的复杂)XML策略文件为checkbock设置一些UI但这到底在做什么?这方面的信息在哪里

  • 它是否在不重新验证的情况下向客户端提供新的ID令牌
  • 它是否提供了新的身份验证代码
  • 它是否使用隐藏的i形框架
  • 如何从客户端应用程序实际调用/完成刷新?(水疗)
  • 是否需要往返B2C,而不要求用户提供信用卡,并将其重定向回应用程序?或者应用程序是否能够使刷新请求完全UI/UX静音?如果是,怎么做?API在哪里?是否需要MSAL.js中的某些内容
  • 为什么只在本地?如果B2C是“中间人”IDP,它发行的代币是自己的(当然不是来自社交账户),那么为什么不能以这种方式为所有账户类型(本地或社交)刷新代币
我的理解是,对于隐式授权,存储刷新令牌是不可能的,因此保留会话cookie并使用它通过i-frame以
prompt=none
获取新会话是一种能够保持会话cookie更新和最新的黑客行为

以下是前MS(现为Auth0)身份大师维托里奥的一篇文章:

他提到,刷新令牌轮换“更新访问令牌”。这被描述为:

“使刷新令牌无效并发出新令牌的功能 每当用于刷新访问令牌时”

这似乎是通过会话cookie和i-frame“hack”(与隐式授权一起使用)实现的,它返回一个新的授权代码,该代码(可能)可用于获取新的访问令牌

我们现在有了PKCE,为什么还需要这样做?显然,即使使用PKCE,在浏览器中存储长寿命的刷新令牌仍然不好。我发现SPA最大生存期的B2C刷新令牌是24小时(而不是90天)

那么我们今天还在做这个会话cookie隐藏的i-frame hack吗?即使是PKCE?B2C KMSI就是这么做的吗?如果是,它是如何触发的,我的应用程序如何实际获取新的访问令牌以与我的API一起使用


底线:我需要让我的用户保持签名状态,并且即使他们在100多天内不再打开我的应用程序,也可以在不重新验证的情况下访问我的安全web API。理想情况下,这应该完全无声地完成,无需往返,无论账户是国内流离失所者方面的本地账户还是社会账户。B2C KMSI功能是正确的机制吗?

KMSI/没有KMSI影响AAD B2C如何在客户端设置其web会话cookie

KMSI:为您想要的时间段设置持久会话cookie。这意味着用户不需要在下次访问您的网站时向AAD B2C重新提供凭据,即使他们关闭了浏览器。您可以将此设置为的最长时间约为65年

No KMSI:设置会话cookie(非持久)。 如果用户关闭浏览器,下次访问您的网站时必须向AAD B2C出示其凭据。如果他们没有关闭浏览器,只关闭选项卡,他们可以登录而不重新显示网站凭据的最长时间是24小时

KMSI+隐式流(SPA)-上述规则适用于登录和令牌续订操作。使用了一个隐藏的iframe,它依赖于AAD B2C cookie。使用隐藏的iframe,该iframe使用AAD B2C会话cookie发布新的AT

KMSI+PKCE(SPA)-对于刷新令牌有效的令牌续订,忽略上述规则。以上规则仅在刷新令牌过期或不存在时适用,这是回退。否则,它们不适用,因为刷新令牌流不依赖cookie。最多24小时刷新令牌。使用隐藏的iframe,并处理OIDC刷新令牌流。但是,当处理AAD B2C会话cookie时,您将获得一个新的身份验证代码

KMSI+代码/PKCE(Web App)-对于刷新令牌有效的令牌续订,忽略上述规则。以上规则仅在刷新令牌过期或不存在时适用。否则,它们不适用,因为刷新令牌不依赖cookie。最大刷新令牌90天之后,您将返回到cookie。但是,当处理AAD B2C会话cookie时,您将获得一个新的身份验证代码

KMSI不适用于社会帐户,因为AAD B2C始终依赖于社会帐户会话。如果AAD B2C让您登录,但您的帐户在联合IdP上被删除,这将是一个安全漏洞。您可以调整会话管理以忽略对社交IdP的回拨,但是没有用户体验来为社交IdP选择KMSI,也无法通过编程实现

由于KMSI围绕会话cookie展开,因此仅当执行到AAD B2C的往返时才对其进行评估。 这是当您的刷新令牌过期(代码/PKCE流)或您需要一个新的访问令牌(隐式)或您正在进行新的登录时。这些场景涉及处理AAD B2C会话cookie的往返过程

您不需要以任何方式配置MSAL来配合您的KMSI配置。AAD B2C本身在需要时处理cookie

由于您使用的是SPA+PKCE,您希望最大化会话生存期,因为它是RT流的回退(最多24小时),但会话生存期也只有最多24小时。因此,您不得不使用KMSI为您提供长达65年的会话生存期,即使在浏览器关闭后,此会话仍会持续。每次使用刷新令牌或cookie(如果RT也过期(最多24小时))过期时,将有一个隐藏的iframe来获取新的访问令牌(最多24小时)

它是如何触发的-MSAL库知道访问令牌的有效性,并在需要时执行所需的刷新令牌调用。AAD B2C验证