在 Azure Active Directory B2C 中設定令牌

開始之前,請使用 [選擇原則類型 選取器] 來選擇您要設定的原則類型。 Azure Active Directory B2C 提供兩種方法來定義使用者如何與您的應用程式互動:透過預先 定義的使用者流程 ,或透過完全可設定 的自定義原則。 本文中每個方法所需的步驟都不同。

在本文中,您將瞭解如何在 Azure Active Directory B2C (Azure AD B2C) 中設定 令牌 的存留期和相容性。

必要條件

令牌存留期行為

您可以設定權杖存留期,包括:

  • 存取和識別碼令牌存留期 (分鐘) - OAuth 2.0 持有人令牌和標識碼令牌的存留期。 默認值為 60 分鐘(1 小時)。 最低(含)為 5 分鐘。 最大值(含)為1,440分鐘(24小時)。
  • 重新整理令牌存留期 (天) - 如果您的應用程式已獲 offline_access 授與範圍,重新整理令牌可用來取得新的存取令牌之前的最大時間週期。 預設值為14天。 最低(含)是一天。 上限(含)90 天。
  • 重新整理令牌滑動視窗存留期 - 重新整理令牌滑動窗口類型。 Bounded表示重新整理權杖可以擴充為存留期長度 (days) 中指定的 No expiry 表示重新整理令牌滑動視窗存留期永遠不會過期。
  • 存留期長度 (天) - 在這段期間過後,用戶會強制重新驗證,而不論應用程式取得的最新重新整理令牌的有效期間為何。 此值必須大於或等於 Refresh 令牌存留期 值。

下圖顯示重新整理令牌滑動視窗存留期行為。

Refresh token lifetime

注意

搭配 PKCE 使用授權碼流程的單頁應用程式一律會有 24 小時的重新整理令牌存留期,而行動應用程式、傳統型應用程式和 Web 應用程式則不會遇到這項限制。 深入了解瀏覽器中重新整理令牌的安全性影響。

設定令牌存留期

若要設定您的使用者流程令牌存留期:

  1. 登入 Azure 入口網站
  2. 如果您有多個租使用者的存取權,請選取頂端功能表中的 設定 圖示,從 [目錄 + 訂用帳戶] 功能表切換至您的 Azure AD B2C 租使用者。
  3. 選擇 Azure 入口網站 左上角的 [所有服務],然後搜尋並選取 [Azure AD B2C]。
  4. 選取 [使用者流程] [原則]。
  5. 開啟您先前建立的使用者流程。
  6. 選取 [屬性] 。
  7. 在 [令牌存留期] 下,調整屬性以符合應用程式的需求。
  8. 選取 [儲存]。

configure user flows tokens in Azure portal.

若要變更令牌相容性上的設定,您可以在延伸模塊中設定 令牌簽發者 技術配置檔元數據,或您想要影響之原則的信賴憑證者檔案。 令牌簽發者技術配置檔看起來像下列範例:

<ClaimsProviders>
  <ClaimsProvider>
    <DisplayName>Token Issuer</DisplayName>
    <TechnicalProfiles>
      <TechnicalProfile Id="JwtIssuer">
        <Metadata>
          <Item Key="token_lifetime_secs">3600</Item>
          <Item Key="id_token_lifetime_secs">3600</Item>
          <Item Key="refresh_token_lifetime_secs">1209600</Item>
          <Item Key="rolling_refresh_token_lifetime_secs">7776000</Item>
          <!--<Item Key="allow_infinite_rolling_refresh_token">true</Item>-->
          <Item Key="IssuanceClaimPattern">AuthorityAndTenantGuid</Item>
          <Item Key="AuthenticationContextReferenceClaimPattern">None</Item>
        </Metadata>
      </TechnicalProfile>
    </TechnicalProfiles>
  </ClaimsProvider>
</ClaimsProviders>

在上述範例中會設定下列值:

  • token_lifetime_secs - 存取令牌存留期(秒)。 默認值為 3,600 (1 小時)。 最小值為 300 (5 分鐘)。 最大值為86,400(24小時)。
  • id_token_lifetime_secs - 識別元令牌存留期(秒)。 默認值為 3,600 (1 小時)。 最小值為 300 (5 分鐘)。 最大值為86,400(24小時)。
  • refresh_token_lifetime_secs重新整理令牌存留期(秒)。 默認值為 1,209,600 (14 天)。 最低為86,400(24小時)。 最大值為 7,776,000 (90 天)。
  • rolling_refresh_token_lifetime_secs - 重新整理令牌滑動視窗存留期(秒)。 默認值為 7,776,000 (90 天)。 最低為86,400(24小時)。 最大值為 31,536,000 (365 天)。 如果您不想強制執行滑動視窗存留期,請將 的值 allow_infinite_rolling_refresh_token 設定為 true
  • allow_infinite_rolling_refresh_token - 重新整理令牌滑動視窗存留期永遠不會過期。

令牌相容性設定

您可以設定權杖相容性,包括:

  • 簽發者 (iss) 宣告 - 存取和識別元令牌簽發者格式。
  • Subject (sub) 宣告 - 令牌判斷提示信息的主體,例如應用程式的使用者。 這個值是不可變的,無法重新指派或重複使用。 它可以用來安全地執行授權檢查,例如當令牌用來存取資源時。 根據預設,主體宣告會填入目錄中用戶的物件標識符。
  • 代表使用者流程 的宣告 - 此宣告會識別已執行的使用者流程。 可能的值: tfp (預設值),或 acr

若要設定您的使用者流程相容性設定:

  1. 選取 [使用者流程] [原則]。
  2. 開啟您先前建立的使用者流程。
  3. 選取 [屬性] 。
  4. 在 [令牌相容性設定] 下,調整屬性以符合應用程式的需求。
  5. 選取 [儲存]。

若要變更令牌相容性上的設定,您可以在擴充功能中設定 令牌簽發者 技術配置檔元數據,或您要更新之原則的信賴憑證者檔案。 令牌簽發者技術配置檔看起來像下列範例:

<ClaimsProviders>
  <ClaimsProvider>
    <DisplayName>Token Issuer</DisplayName>
    <TechnicalProfiles>
      <TechnicalProfile Id="JwtIssuer">
        <Metadata>
          ...
          <Item Key="IssuanceClaimPattern">AuthorityAndTenantGuid</Item>
          <Item Key="AuthenticationContextReferenceClaimPattern">None</Item>
        </Metadata>
      </TechnicalProfile>
    </TechnicalProfiles>
  </ClaimsProvider>
</ClaimsProviders>
  • 簽發者 (iss) 宣告 - 簽發者 (iss) 宣告是以 IssuanceClaimPattern 元數據項目設定。 適用的值為 AuthorityAndTenantGuidAuthorityWithTfp

  • 設定代表原則識別碼 的宣告 - 設定此值的選項為 TFP (信任架構原則) 和 ACR (驗證內容參考)。 TFP 是建議的值。 以的值None設定 AuthenticationContextReferenceClaimPattern

    ClaimsSchema 元素中,新增此元素:

    <ClaimType Id="trustFrameworkPolicy">
      <DisplayName>Trust framework policy name</DisplayName>
      <DataType>string</DataType>
    </ClaimType>
    

    在信賴憑證者原則OutputClaims 元素下,新增下列輸出宣告:

    <OutputClaim ClaimTypeReferenceId="trustFrameworkPolicy" Required="true" DefaultValue="{policy}" PartnerClaimType="tfp" />
    

    針對 ACR,移除 AuthenticationContextReferenceClaimPattern 專案。

  • Subject (sub) 宣告 - 此選項預設為 ObjectID,如果您想要將此設定切換為 Not Supported,請取代這一行:

    <OutputClaim ClaimTypeReferenceId="objectId" PartnerClaimType="sub" />
    

    以這行程式碼取代:

    <OutputClaim ClaimTypeReferenceId="sub" />
    

為您的應用程式提供選擇性宣告

應用程式宣告是傳回給應用程式的值。 更新您的使用者流程以包含所需的宣告。

  1. 選取 [使用者流程] [原則]。
  2. 開啟您先前建立的使用者流程。
  3. 選取 [ 應用程式宣告]。
  4. 選擇您要傳送回應用程式的宣告和屬性。
  5. 選取 [儲存]。

信賴 憑證者原則技術配置文件 輸出宣告是傳回給應用程式的值。 在成功使用者旅程之後,新增輸出宣告會將宣告發出至令牌,並將傳送至應用程式。 修改信賴憑證者區段中的技術配置文件專案,以將所需的宣告新增為輸出宣告。

  1. 開啟您的自定義原則檔案。 例如,SignUpOrSignin.xml。
  2. 尋找 OutputClaims 元素。 新增您想要包含在令牌中的 OutputClaim。
  3. 設定輸出宣告屬性。

下列範例會新增 accountBalance 宣告。 accountBalance 宣告會以餘額的形式傳送至應用程式。

<RelyingParty>
  <DefaultUserJourney ReferenceId="SignUpOrSignIn" />
  <TechnicalProfile Id="PolicyProfile">
    <DisplayName>PolicyProfile</DisplayName>
    <Protocol Name="OpenIdConnect" />
    <OutputClaims>
      <OutputClaim ClaimTypeReferenceId="displayName" />
      <OutputClaim ClaimTypeReferenceId="givenName" />
      <OutputClaim ClaimTypeReferenceId="surname" />
      <OutputClaim ClaimTypeReferenceId="email" />
      <OutputClaim ClaimTypeReferenceId="objectId" PartnerClaimType="sub"/>
      <OutputClaim ClaimTypeReferenceId="identityProvider" />
      <OutputClaim ClaimTypeReferenceId="tenantId" AlwaysUseDefaultValue="true" DefaultValue="{Policy:TenantObjectId}" />
      <!--Add the optional claims here-->
      <OutputClaim ClaimTypeReferenceId="accountBalance" DefaultValue="" PartnerClaimType="balance" />
    </OutputClaims>
    <SubjectNamingInfo ClaimType="sub" />
  </TechnicalProfile>
</RelyingParty>

OutputClaim 元素包含下列屬性:

  • ClaimTypeReferenceId - 原則檔或父原則檔案中 ClaimsSchema 區段中已定義的宣告類型識別符。
  • PartnerClaimType - 可讓您變更權杖中宣告的名稱。
  • DefaultValue - 預設值。 您也可以將預設值設定為 宣告解析程式 ,例如租使用者識別碼。
  • AlwaysUseDefaultValue - 強制使用預設值。

授權碼存留期

使用 OAuth 2.0 授權碼流程 時,應用程式可以使用授權碼來要求目標資源的存取權杖。 授權碼是短期的,會在大約 10 分鐘後到期。 無法設定授權碼存留期。 請確定您的應用程式在 10 分鐘內兌換授權碼。

下一步