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

时间:2019-07-04 10:33:40

标签: azure azure-active-directory azure-ad-b2c identity-experience-framework

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

该信息需要不时更新,但我有能力每小时更新一次。

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

静默刷新令牌。

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

有办法吗?

2 个答案:

答案 0 :(得分:2)

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调用添加到此用户旅程中。

答案 1 :(得分:1)

检查@Chris Padgett答案

一种获得喜欢的方式,

  1. 放置一个计时器以进行Web API调用(我想您已经有一个计时器可以引发无声续订请求)
  2. 通过发送用户访问令牌从JS进行[Authorize] rest API调用
  3. 进行数据库调用以从rest API中提取详细信息,并将其保存在SPA应用程序本地变量中。