【问题标题】:Azure AD B2C - Refresh_Token refresh claims via REST (Identity Experience Framework)Azure AD B2C - Refresh_Token 通过 REST(身份体验框架)刷新声明
【发布时间】:2018-03-29 06:24:00
【问题描述】:

我们已设置 Azure AD B2C 以使用身份体验框架,并在登录/注册时进行 REST 调用,以通过 Azure 函数获取额外的安全凭据声明。这很好用。

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

是否有另一种解决方案来刷新令牌而无需再次登录以获取最新更新?

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

【问题讨论】:

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


    【解决方案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>
    

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

    <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 目录中读取声明。 p>

    另一个编排步骤可以调用您的 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>
    

    【讨论】:

    • 感谢克里斯的详细回答。尝试此操作时,尽管我们收到此错误:{ "error": "invalid_grant", "error_description": "AADB2C90085: The service has encountered an internal error. Please reauthenticate and try again.\r\nCorrelation ID: 76b2e073-0015-4f63-9ef1-ae004822c59b\r\nTimestamp: 2018-04-03 04:26:23Z\r\n" } 我不知道如何调试它 - 我尝试删除我们的 ClaimsExchange REST 调用,但它也不起作用(尽管在任何情况下都没有调用它)
    • 我会尝试重现。
    • @ChrisPadgett 你能重现这个吗?我还希望刷新刷新令牌中返回的声明。
    • @tank104,我的回答 here 可能是相关的。简而言之:在使用授权代码流时,我收到错误 AADB2C90085,因为我的 TokenSIgningKeyContainer / TokenEncryptionKeyContainer 生成错误。
    • @Anananasu 我也遇到了同样的错误,但是我的密钥是根据您在帖子中链接到的 b2c 文档正确生成的。
    猜你喜欢
    • 2019-06-25
    • 2020-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-06
    • 1970-01-01
    相关资源
    最近更新 更多