Azure AD B2C - 通过REST刷新Refresh_Token刷新声明(Identity Experience Framework)

时间:2018-03-29 06:24:01

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

我们使用Azure AD B2C设置来使用Identity Experience Framework,并且在登录/注册时,会通过Azure函数进行REST调用以获取额外的安全凭据声明。这很好。

当我们通过Azure AD B2C通过Refresh_Token请求访问/ Id令牌时,看起来我们得到相同的令牌,并且它不会调用REST API来获取最新更新的令牌声明。是否有可能改变这个用户之旅呢?

是否有其他解决方案可以刷新令牌而无需再次登录以获取最新更新?

(我们可以在代码中解决这个问题而不使用令牌,但出于各种原因,我们首先要探讨这个问题。)

1 个答案:

答案 0 :(得分:1)

您可以声明刷新令牌用户旅程,该旅程调用您的REST API,如下所示:

<UserJourney Id="TokenRefresh">
  <PreserveOriginalAssertion>false</PreserveOriginalAssertion>
  <OrchestrationSteps>
    <OrchestrationStep Order="1" Type="ClaimsExchange">
      <ClaimsExchanges>
        <ClaimsExchange Id="RefreshTokenExchange" TechnicalProfileReferenceId="TpEngine_RefreshToken" />
      </ClaimsExchanges>
    </OrchestrationStep>
    <OrchestrationStep Order="2" Type="ClaimsExchange">
      <ClaimsExchanges>
        <ClaimsExchange Id="AADUserReadWithObjectId" TechnicalProfileReferenceId="AAD-UserReadUsingObjectId" />
      </ClaimsExchanges>
    </OrchestrationStep>
    <!-- TODO: Add an orchestration step that calls the REST API. -->
    <OrchestrationStep Order="3" Type="SendClaims" CpimIssuerTechnicalProfileReferenceId="JwtIssuer" />
  </OrchestrationSteps>
</UserJourney>

初始编排步骤调用 TpEngine_RefreshToken 技术配置文件,该配置文件从当前刷新令牌读取 objectId 声明:

<ClaimsProvider>
  <DisplayName>Trustframework Policy Engine Technical Profiles</DisplayName>
  <TechnicalProfiles>
    <TechnicalProfile Id="TpEngine_c3bd4fe2-1775-4013-b91d-35f16d377d13">
      <DisplayName>Trustframework Policy Engine Default Technical Profile</DisplayName>
      <Protocol Name="None" />
      <Metadata>
        <Item Key="url">{service:te}</Item>
      </Metadata>
    </TechnicalProfile>
    <TechnicalProfile Id="TpEngine_RefreshToken">
      <DisplayName>Trustframework Policy Engine Refresh Token Technical Profile</DisplayName>
      <Protocol Name="None" />
      <OutputClaims>
        <OutputClaim ClaimTypeReferenceId="objectId" />
      </OutputClaims>
    </TechnicalProfile>
  </TechnicalProfiles>
</ClaimsProvider>

第二个业务流程步骤调用 AAD-UserReadUsingObjectId 技术配置文件,该配置文件通过 objectId 声明从登录用户的Azure AD B2C目录中读取声明。

另一个业务流程步骤可以调用您的REST API。

最终的业务流程步骤会发布新令牌。

您必须使用 RefreshTokenUserJourneyId 元数据项和 JwtIssuer 技术配置文件引用 TokenRefresh 用户旅程,以便此技术发布的令牌此用户旅程会刷新个人资料:

<ClaimsProvider>
  <DisplayName>Token Issuer</DisplayName>
  <TechnicalProfiles>
    <TechnicalProfile Id="JwtIssuer">
      <DisplayName>JWT Issuer</DisplayName>
      <Protocol Name="None" />
      <OutputTokenFormat>JWT</OutputTokenFormat>
      <Metadata>
        <Item Key="client_id">{service:te}</Item>
        <Item Key="issuer_refresh_token_user_identity_claim_type">objectId</Item>
        <Item Key="RefreshTokenUserJourneyId">TokenRefresh</Item>
        <Item Key="SendTokenResponseBodyWithJsonNumbers">true</Item>
      </Metadata>
      <CryptographicKeys>
        <Key Id="issuer_secret" StorageReferenceId="B2C_1A_TokenSigningKeyContainer" />
        <Key Id="issuer_refresh_token_key" StorageReferenceId="B2C_1A_TokenEncryptionKeyContainer" />
      </CryptographicKeys>
      <InputClaims />
      <OutputClaims />
    </TechnicalProfile>
  </TechnicalProfiles>
</ClaimsProvider>