首页 > 解决方案 > Azure AD B2C 自定义策略中的刷新令牌吊销

问题描述

我已经提出了Refresh token revoke问题,它在 1-5 分钟后起作用。
但它仅适用于内置策略(用户流),不适用于自定义策略。

我从内置策略中获得了 refresh_token A,从自定义策略中获得了 refresh_token B。

为同一租户中的同一用户接收两个令牌。

执行撤销(图形 API)后,当我尝试使用 refresh_token A 获取新的访问和刷新令牌时,它失败了。但是当我尝试使用 refresh_token B(通过自定义策略接收)时,它仍然有效。能够获得新的令牌。

撤销电话后,我给了 15 分钟的时间间隔。

请帮我解决这个问题。

标签: azure-active-directoryazure-ad-b2cazure-ad-graph-api

解决方案


使用自定义策略在 Azure Active Directory B2C 中配置资源所有者密码凭据流一描述了必须实施的自定义元素,以管理刷新令牌并测试已发布的令牌是否无效。

你必须:

  • 创建refreshTokenIssuedOnDateTimerefreshTokensValidFromDateTime声明类型
  • 创建AssertRefreshTokenIssuedLaterThanValidFromDate声明转换
  • 创建AAD-UserReadUsingObjectId-CheckRefreshTokenDateSM-RefreshTokenReadAndSetup技术配置文件
  • 创建ResourceOwnerPasswordCredentials-RedeemRefreshToken用户旅程
  • 请参阅JwtIssuer技术配置文件的RefreshTokenUserJourneyId元属性中的此用户旅程

默认情况下,时钟偏差设置为 0,但您可以使用AssertRefreshTokenIssuedLaterThanValidFromDate声明转换的TreatAsEqualIfWithinMillseconds参数更改此值:

<ClaimsTransformation Id="AssertRefreshTokenIssuedLaterThanValidFromDate" TransformationMethod="AssertDateTimeIsGreaterThan">
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="refreshTokenIssuedOnDateTime" TransformationClaimType="leftOperand" />
    <InputClaim ClaimTypeReferenceId="refreshTokensValidFromDateTime" TransformationClaimType="rightOperand" />
  </InputClaims>
  <InputParameters>
    <InputParameter Id="AssertIfEqualTo" DataType="boolean" Value="false" />
    <InputParameter Id="AssertIfRightOperandIsNotPresent" DataType="boolean" Value="true" />
    <!-- Set the clock skew to 5 minutes (300000 milliseconds). -->
    <InputParameter Id="TreatAsEqualIfWithinMillseconds" DataType="int" Value="300000" />
  </InputParameters>
</ClaimsTransformation>

推荐阅读