刷新访问令牌时调用自定义 REST API

Call Custom REST API When Refreshing Access Token

我有一个自定义登录策略,它调用自定义 REST API 从我的数据库中获取有关用户的一些信息。

该信息需要每隔一段时间更新一次,但我可以负担得起每小时更新一次。

问题是,我们不会每小时提示用户登录。相反,我们每小时使用 acquireTokenSilent

静默刷新令牌

我需要以某种方式拦截 acquireTokenSilent,使其调用我的自定义 REST API 并提取额外的声明,就像我在自定义登录策略中所做的那样。

有办法吗?

查看@Chris Padgett 的回答

您可以通过一种方式实现,

  1. 设置一个计时器来进行网络 API 调用(我猜你已经有一个可以提出静默续订请求)
  2. 通过发送用户访问令牌从 JS 进行 [授权] 休息 API 调用
  3. 进行数据库调用以从 rest API 中提取详细信息并将它们保存在您的 SPA 应用局部变量中。

The Configure the resource owner password credentials flow in Azure Active Directory B2C using a custom policy article 介绍了如何为令牌刷新实施用户旅程。

具体来说:

  1. 此用户旅程引用自 JwtIssuer 技术配置文件的 RefreshTokenUserJourneyId 元属性。
<ClaimsProvider>
  <DisplayName>Token Issuer</DisplayName>
  <TechnicalProfiles>
    <TechnicalProfile Id="JwtIssuer">
      <Metadata>
        <!-- Point to the redeem refresh token user journey-->
        <Item Key="RefreshTokenUserJourneyId">ResourceOwnerPasswordCredentials-RedeemRefreshToken</Item>
      </Metadata>
    </TechnicalProfile>
  </TechnicalProfiles>
</ClaimsProvider>
  1. ResourceOwnerPasswordCredentials-RedeemRefreshToken用户旅程检查刷新令牌是否已经失效
<UserJourney Id="ResourceOwnerPasswordCredentials-RedeemRefreshToken">
  <PreserveOriginalAssertion>false</PreserveOriginalAssertion>
  <OrchestrationSteps>
    <OrchestrationStep Order="1" Type="ClaimsExchange">
      <ClaimsExchanges>
        <ClaimsExchange Id="RefreshTokenSetupExchange" TechnicalProfileReferenceId="SM-RefreshTokenReadAndSetup" />
      </ClaimsExchanges>
    </OrchestrationStep>
    <OrchestrationStep Order="2" Type="ClaimsExchange">
      <ClaimsExchanges>
        <ClaimsExchange Id="CheckRefreshTokenDateFromAadExchange" TechnicalProfileReferenceId="AAD-UserReadUsingObjectId-CheckRefreshTokenDate" />
      </ClaimsExchanges>
    </OrchestrationStep>
    <OrchestrationStep Order="3" Type="SendClaims" CpimIssuerTechnicalProfileReferenceId="JwtIssuer" />
  </OrchestrationSteps>
</UserJourney>

您可以将您的 API 呼叫添加到此用户旅程。