分享方式:


字串宣告轉換

本文提供在 Azure Active Directory B2C (Azure AD B2C) 中使用身分識別體驗架構架構的字串宣告轉換範例。 如需詳細資訊,請參閱 宣告轉換

AssertStringClaimsAreEqual

比較兩個宣告,如果它們不等於指定的比較 inputClaim1、inputClaim2 和 stringComparison,則會擲回例外狀況。

查看 此宣告轉換的實時示範

元素 TransformationClaimType 資料類型 備註
InputClaim inputClaim1 字串 要比較的第一個宣告類型。
InputClaim inputClaim2 字串 要比較的第二個宣告類型。
InputParameter stringComparison 字串 字串比較,其中一個值:Ordinal、OrdinalIgnoreCase。

AssertStringClaimsAreEqual 宣告轉換一律會從自我判斷技術配置檔或 DisplayControl 呼叫的驗證技術配置文件執行。 UserMessageIfClaimsTransformationStringsAreNotEqual自我判斷技術配置檔的元數據會控制向用戶呈現的錯誤訊息。 錯誤訊息可以 當地語系化

圖表顯示如何使用判斷提示字串宣告等於宣告轉換。

AssertStringClaimsAreEqual 的範例

您可以使用此宣告轉換來確保兩個宣告具有相同的值。 如果沒有,則會擲回錯誤訊息。 下列範例會檢查 strongAuthenticationEmailAddress 宣告是否等於電子郵件宣告。 否則會擲回錯誤訊息。

<ClaimsTransformation Id="AssertEmailAndStrongAuthenticationEmailAddressAreEqual" TransformationMethod="AssertStringClaimsAreEqual">
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="strongAuthenticationEmailAddress" TransformationClaimType="inputClaim1" />
    <InputClaim ClaimTypeReferenceId="email" TransformationClaimType="inputClaim2" />
  </InputClaims>
  <InputParameters>
    <InputParameter Id="stringComparison" DataType="string" Value="ordinalIgnoreCase" />
  </InputParameters>
</ClaimsTransformation>
  • 輸入宣告:
    • inputClaim1: someone@contoso.com
    • inputClaim2: someone@outlook.com
  • 輸入參數:
    • stringComparison: ordinalIgnoreCase
  • 結果:擲回錯誤

呼叫 AssertStringClaimsAreEqual 宣告轉換

login-NonInteractive 驗證技術配置檔會呼叫 AssertEmailAndStrongAuthenticationEmailAddressAreEqual 宣告轉換。

<TechnicalProfile Id="login-NonInteractive">
  ...
  <OutputClaimsTransformations>
    <OutputClaimsTransformation ReferenceId="AssertEmailAndStrongAuthenticationEmailAddressAreEqual" />
  </OutputClaimsTransformations>
</TechnicalProfile>

自我判斷技術配置檔會呼叫驗證 登入-NonInteractive 技術配置檔。

<TechnicalProfile Id="SelfAsserted-LocalAccountSignin-Email">
  <Metadata>
    <Item Key="UserMessageIfClaimsTransformationStringsAreNotEqual">Custom error message the email addresses you provided are not the same.</Item>
  </Metadata>
  <ValidationTechnicalProfiles>
    <ValidationTechnicalProfile ReferenceId="login-NonInteractive" />
  </ValidationTechnicalProfiles>
</TechnicalProfile>

BuildUri

根據時間密碼 (TOTP) URI 建立時間。 URI 是使用者唯一標識碼的組合,例如電子郵件位址和秘密密鑰。 URI 稍後會轉換成向用戶顯示的 QR 代碼。 查看 此宣告轉換的實時示範

元素 TransformationClaimType 資料類型 備註
InputClaim path 字串 使用者的唯一標識碼,例如電子郵件地址、使用者名稱或電話號碼。
InputClaim query.secret 字串 TOTP 秘密金鑰。
InputParameter scheme 字串 URI 的配置部分。 例如: otpauth
InputParameter host 字串 URI 的配置部分。 例如: totp
InputParameter query.issuer 字串 URI 的簽發者部分。 例如: {AuthenticatorIssuer}
OutputClaim outputClaim 字串 叫用這個宣告轉換之後所產生的宣告。

BuildUri 的範例

下列宣告轉換會產生將在 QR 代碼或深層連結中顯示的 TOTP URI。

<ClaimsTransformation Id="CreateUriString" TransformationMethod="BuildUri">
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="uriLabel" TransformationClaimType="path" />
    <InputClaim ClaimTypeReferenceId="secretKey" TransformationClaimType="query.secret" />
  </InputClaims>
  <InputParameters>
    <InputParameter Id="scheme" DataType="string" Value="otpauth" />
    <InputParameter Id="host" DataType="string" Value="totp" />
    <InputParameter Id="query.issuer" DataType="string" Value="{AuthenticatorIssuer}" />
  </InputParameters>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="qrCodeContent" TransformationClaimType="outputClaim" />
  </OutputClaims>
</ClaimsTransformation>
  • 輸入宣告:
    • path: emily@fabrikam.com
    • query.secretfay2lj7ynpntjgqa
  • 輸入參數:
    • schemeotpauth
    • hosttotp
    • query.issuer{AuthenticatorIssuer}
  • 輸出宣告:
    • outputClaimotpauth://totp/Contoso%20demo:emily@fabrikam.com?secret=fay2lj7ynpntjgqa&issuer=Contoso+demo

ChangeCase

根據運算符,將提供的宣告大小寫變更為小寫或大寫。 查看 此宣告轉換的實時示範

元素 TransformationClaimType 資料類型 備註
InputClaim inputClaim1 字串 要變更的宣告。
InputParameter toCase 字串 下列其中一個值:LOWERUPPER
OutputClaim outputClaim 字串 叫用這個宣告轉換之後所產生的宣告。

ChangeCase 的範例

下列宣告轉換會將電子郵件宣告變更為小寫。

<ClaimsTransformation Id="ChangeToLower" TransformationMethod="ChangeCase">
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="email" TransformationClaimType="inputClaim1" />
  </InputClaims>
<InputParameters>
  <InputParameter Id="toCase" DataType="string" Value="LOWER" />
</InputParameters>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="email" TransformationClaimType="outputClaim" />
  </OutputClaims>
</ClaimsTransformation>
  • 輸入宣告:
    • 電子郵件: SomeOne@contoso.com
  • 輸入參數:
    • toCase:LOWER
  • 輸出宣告:
    • 電子郵件: someone@contoso.com

CompareClaims

判斷某個字串宣告是否等於另一個字串宣告。 結果是具有 或 falsetrue的新布爾值宣告。 查看 此宣告轉換的實時示範

元素 TransformationClaimType 資料類型 備註
InputClaim inputClaim1 字串 要比較的第一個宣告類型。
InputClaim inputClaim2 字串 要比較的第二個宣告類型。
InputParameter ! 運算子之後 字串 可能的值: EQUALNOT EQUAL
InputParameter ignoreCase 字串 指定此比較是否應該忽略所比較字串的案例。
OutputClaim outputClaim boolean 叫用這個宣告轉換之後所產生的宣告。

CompareClaims 的範例

使用此宣告轉換來檢查宣告是否等於另一個宣告。 下列宣告轉換會檢查電子郵件宣告的值是否與 Verified.Email 宣告相同。

<ClaimsTransformation Id="CheckEmail" TransformationMethod="CompareClaims">
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="Email" TransformationClaimType="inputClaim1" />
    <InputClaim ClaimTypeReferenceId="Verified.Email" TransformationClaimType="inputClaim2" />
  </InputClaims>
  <InputParameters>
    <InputParameter Id="operator" DataType="string" Value="NOT EQUAL" />
    <InputParameter Id="ignoreCase" DataType="string" Value="true" />
  </InputParameters>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="SameEmailAddress" TransformationClaimType="outputClaim" />
  </OutputClaims>
</ClaimsTransformation>
  • 輸入宣告:
    • inputClaim1: someone@contoso.com
    • inputClaim2: someone@outlook.com
  • 輸入參數:
    • 運算子:NOT EQUAL
    • ignoreCase: true
  • 輸出宣告:
    • outputClaim: true

CompareClaimToValue

判斷宣告值是否等於輸入參數值。 查看 此宣告轉換的實時示範

元素 TransformationClaimType 資料類型 備註
InputClaim inputClaim1 字串 要比較的宣告類型。
InputParameter ! 運算子之後 字串 可能的值: EQUALNOT EQUAL
InputParameter compareTo 字串 字串比較,其中一個值,也就是輸入宣告值必須比較的字串:Ordinal、OrdinalIgnoreCase。
InputParameter ignoreCase 字串 指定此比較是否應該忽略所比較字串的案例。
OutputClaim outputClaim boolean 叫用這個宣告轉換之後所產生的宣告。

CompareClaimToValue 的範例

使用此宣告轉換來檢查宣告是否等於您指定的值。 例如,下列宣告轉換會檢查 termsOfUseConsentVersion 宣告的值是否等於 V2

<ClaimsTransformation Id="IsTermsOfUseConsentRequiredForVersion" TransformationMethod="CompareClaimToValue">
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="termsOfUseConsentVersion" TransformationClaimType="inputClaim1" />
  </InputClaims>
  <InputParameters>
    <InputParameter Id="compareTo" DataType="string" Value="V2" />
    <InputParameter Id="operator" DataType="string" Value="NOT EQUAL" />
    <InputParameter Id="ignoreCase" DataType="string" Value="true" />
  </InputParameters>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="termsOfUseConsentRequired" TransformationClaimType="outputClaim" />
  </OutputClaims>
</ClaimsTransformation>
  • 輸入宣告:
    • inputClaim1:v1
  • 輸入參數:
    • compareTo:V2
    • 運算子:NOT EQUAL
    • ignoreCase: true
  • 輸出宣告:
    • outputClaim: true

CopyClaimIfPredicateMatch

如果輸入宣告的值符合輸出宣告述詞,則將宣告的值複製到另一個宣告。 查看 此宣告轉換的實時示範

元素 TransformationClaimType 資料類型 備註
InputClaim inputClaim 字串 要複製的宣告類型。
OutputClaim outputClaim 字串 叫用這個宣告轉換之後所產生的宣告類型。 輸入宣告的值會針對這個宣告述詞進行檢查。

CopyClaimIfPredicateMatch 的範例

下列範例會嘗試將 signInName 宣告值複製到 phoneNumber 宣告。 在此範例中,不會複製值。 signInName 宣告的格式不是電話號碼。 如需完整的範例,請參閱 電話號碼或電子郵件登入 入門套件原則。

<ClaimsTransformation Id="SetPhoneNumberIfPredicateMatch" TransformationMethod="CopyClaimIfPredicateMatch">
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="signInName" TransformationClaimType="inputClaim" />
  </InputClaims>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="phoneNumber" TransformationClaimType="outputClaim" />
  </OutputClaims>
</ClaimsTransformation>
  • 輸入宣告:
    • inputClaim: bob@contoso.com
  • 輸出宣告:
    • outputClaim:輸出宣告不會從其原始值變更。

CopyClaimIfPredicateMatch 的範例,該範例會比較述詞

在此範例中,宣告轉換會複製值。 signInName 宣告的格式正確,電話號碼。

  • 輸入宣告:
    • inputClaim: +11234567890
  • 輸出宣告:
    • outputClaim: +11234567890

CreateOtpSecret

建立 TOTP 字串宣告。 此宣告轉換的輸出是 TOTP 秘密,稍後會儲存在 Azure AD B2C 使用者帳戶中,並與 Microsoft Authenticator 應用程式共用。 驗證器應用程式會在使用者需要通過 MFA 時,使用金鑰來產生 TOTP 程式代碼。 您的原則會使用 金鑰來驗證使用者所提供的 TOTP 程式代碼。

查看 此宣告轉換的實時示範

元素 TransformationClaimType 資料類型 備註
OutputClaim outputClaim 字串 叫用這個宣告轉換之後所產生的宣告,併產生 TOTP 程式代碼。

CreateOtpSecret 的範例

下列宣告轉換會為TOTP多重要素驗證器建立秘密。

<ClaimsTransformation Id="CreateSecret" TransformationMethod="CreateOtpSecret">
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="secretKey" TransformationClaimType="outputClaim" />
  </OutputClaims>
</ClaimsTransformation>
  • 輸出宣告:
    • outputClaimhmlcmd4ph6fph64c

CreateRandomString

使用隨機數產生器建立隨機字串。 如果隨機數產生器的類型 integer為 ,選擇性地提供種子參數和最大數目。 選擇性字串格式參數允許使用輸出格式化,而選擇性base64參數會指定輸出是否為base64編碼的 randomGeneratorType [guid, integer] outputClaim (String)。

查看 此宣告轉換的實時示範

元素 TransformationClaimType 資料類型 備註
InputParameter randomGeneratorType 字串 指定要產生的隨機值( GUID 全域唯一識別子)或 INTEGER (數位)。
InputParameter stringFormat 字串 [選擇性]格式化隨機值。
InputParameter base64 boolean [選擇性]將隨機值轉換成base64。 如果套用字串格式,字串格式之後的值會編碼為base64。
InputParameter maximumNumber int [選擇性] INTEGER 僅限 randomGeneratorType。 指定最大數目。
InputParameter seed int [選擇性] INTEGER 僅限 randomGeneratorType。 指定隨機值的種子。 注意:相同的種子會產生相同的隨機數序列。
OutputClaim outputClaim 字串 叫用這個宣告轉換之後所產生的宣告。 隨機值。

CreateRandomString 的範例

下列範例會產生全域唯一標識符。 此宣告轉換可用來建立隨機UPN(用戶主體名稱)。

<ClaimsTransformation Id="CreateRandomUPNUserName" TransformationMethod="CreateRandomString">
  <InputParameters>
    <InputParameter Id="randomGeneratorType" DataType="string" Value="GUID" />
  </InputParameters>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="upnUserName" TransformationClaimType="outputClaim" />
  </OutputClaims>
</ClaimsTransformation>
  • 輸入參數:
    • randomGeneratorType:GUID
  • 輸出宣告:
    • outputClaim: bc8bedd2-aaa3-411e-bdee-2f1810b73dfc

CreateRandomString 建立數值的範例

下列範例會產生介於 0 到 1000 之間的整數隨機值。 值會格式化為 OTP_{random value}。

<ClaimsTransformation Id="SetRandomNumber" TransformationMethod="CreateRandomString">
  <InputParameters>
    <InputParameter Id="randomGeneratorType" DataType="string" Value="INTEGER" />
    <InputParameter Id="maximumNumber" DataType="int" Value="1000" />
    <InputParameter Id="stringFormat" DataType="string" Value="OTP_{0}" />
    <InputParameter Id="base64" DataType="boolean" Value="false" />
  </InputParameters>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="randomNumber" TransformationClaimType="outputClaim" />
  </OutputClaims>
</ClaimsTransformation>
  • 輸入參數:
    • randomGeneratorType:INTEGER
    • maximumNumber: 1000
    • stringFormat:OTP_{0}
    • base64: false
  • 輸出宣告:
    • outputClaim:OTP_853

CreateStringClaim

從轉換中提供的輸入參數建立字串宣告。 查看 此宣告轉換的實時示範

元素 TransformationClaimType 資料類型 備註
InputParameter value 字串 要設定的字串。 這個輸入參數支援 字串宣告轉換表達式
OutputClaim createdClaim 字串 叫用這個宣告轉換之後所產生的宣告,並在輸入參數中指定的值。

CreateStringClaim 的範例

下列宣告轉換會建立具有服務條款的字串值。

<ClaimsTransformation Id="CreateTermsOfService" TransformationMethod="CreateStringClaim">
  <InputParameters>
    <InputParameter Id="value" DataType="string" Value="Contoso terms of service..." />
  </InputParameters>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="TOS" TransformationClaimType="createdClaim" />
  </OutputClaims>
</ClaimsTransformation>
  • 輸入參數:
    • :Contoso 服務條款...
  • 輸出宣告:
    • createdClaim:TOS 宣告包含「Contoso 服務條款...」價值。

FormatLocalizedString

根據提供的當地語系化格式字串來格式化多個宣告。 此轉換會使用 C# String.Format 方法。 查看 此宣告轉換的實時示範

元素 TransformationClaimType 資料類型 備註
InputClaims 字串 做為字串格式{0}、 {1}{2} 參數的輸入宣告集合。
InputParameter stringFormatId 字串 StringId本地化字串
OutputClaim outputClaim 字串 叫用這個宣告轉換之後所產生的宣告。

注意

您可以指定的輸入宣告數目沒有限制,但格式化字串的最大長度為 4000。

若要使用 FormatLocalizedString 宣告轉換:

  1. 定義本地化字串,並將它與自我判斷提示技術配置檔產生關聯。
  2. ElementType項目必須 LocalizedString 設定為 FormatLocalizedStringTransformationClaimType
  3. StringId是您定義的唯一標識符,稍後會在宣告轉換 stringFormatId中使用。
  4. 在宣告轉換中,指定要以本地化字串設定的宣告清單。 然後將 設定 stringFormatIdStringId 本地化字串專案的 。
  5. 自我判斷技術配置檔顯示控件 輸入或輸出宣告轉換中,參考您的宣告轉換。

FormatLocalizedString 的範例

下列範例會在帳戶已經在目錄中時產生錯誤訊息。 此範例會定義英文(預設值)和西班牙文的當地語系化字串。

<Localization Enabled="true">
  <SupportedLanguages DefaultLanguage="en" MergeBehavior="Append">
    <SupportedLanguage>en</SupportedLanguage>
    <SupportedLanguage>es</SupportedLanguage>
   </SupportedLanguages>

  <LocalizedResources Id="api.localaccountsignup.en">
    <LocalizedStrings>
      <LocalizedString ElementType="FormatLocalizedStringTransformationClaimType" StringId="ResponseMessge_EmailExists">The email '{0}' is already an account in this organization. Click Next to sign in with that account.</LocalizedString>
      </LocalizedStrings>
    </LocalizedResources>
  <LocalizedResources Id="api.localaccountsignup.es">
    <LocalizedStrings>
      <LocalizedString ElementType="FormatLocalizedStringTransformationClaimType" StringId="ResponseMessge_EmailExists">Este correo electrónico "{0}" ya es una cuenta de esta organización. Haga clic en Siguiente para iniciar sesión con esa cuenta.</LocalizedString>
    </LocalizedStrings>
  </LocalizedResources>
</Localization>

宣告轉換會根據當地語系化字串建立回應消息。 此訊息包含內嵌至本地化 sting ResponseMessge_EmailExists的使用者電子郵件位址。

<ClaimsTransformation Id="SetResponseMessageForEmailAlreadyExists" TransformationMethod="FormatLocalizedString">
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="email" />
  </InputClaims>
  <InputParameters>
    <InputParameter Id="stringFormatId" DataType="string" Value="ResponseMessge_EmailExists" />
  </InputParameters>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="responseMsg" TransformationClaimType="outputClaim" />
  </OutputClaims>
</ClaimsTransformation>
  • 輸入宣告:
    • inputClaim: sarah@contoso.com
  • 輸入參數:
    • stringFormat:ResponseMessge_EmailExists
  • 輸出宣告:
    • outputClaim:電子郵件 'sarah@contoso.com' 已是此組織中的帳戶。 選取 [下一步] 以使用該帳戶登入。

FormatStringClaim

根據提供的格式字串來格式化宣告。 此轉換會使用 C# String.Format 方法。 查看 此宣告轉換的實時示範

元素 TransformationClaimType 資料類型 備註
InputClaim inputClaim 字串 做為字串格式 {0} 參數的宣告。
InputParameter stringFormat 字串 字串格式,包括 {0} 參數。 這個輸入參數支援 字串宣告轉換表達式
OutputClaim outputClaim 字串 叫用這個宣告轉換之後所產生的宣告。

注意

允許的大小上限為 4000。

FormatStringClaim 的範例

使用此宣告轉換,將任何字串格式化為一個參數 {0}。 下列範例會 建立 userPrincipalName。 所有社交識別提供者技術配置檔,例如 Facebook-OAUTH 呼叫 CreateUserPrincipalName 來產生 userPrincipalName

<ClaimsTransformation Id="CreateUserPrincipalName" TransformationMethod="FormatStringClaim">
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="upnUserName" TransformationClaimType="inputClaim" />
  </InputClaims>
  <InputParameters>
    <InputParameter Id="stringFormat" DataType="string" Value="cpim_{0}@{RelyingPartyTenantId}" />
  </InputParameters>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="userPrincipalName" TransformationClaimType="outputClaim" />
  </OutputClaims>
</ClaimsTransformation>
  • 輸入宣告:
    • inputClaim: 5164db16-3eee-4629-bfda-dcc3326790e9
  • 輸入參數:
    • stringFormat: cpim_{0}@{RelyingPartyTenantId}
  • 輸出宣告:
    • outputClaim: cpim_5164db16-3eee-4629-bfda-dcc3326790e9@b2cdemo.onmicrosoft.com

FormatStringMultipleClaims

根據提供的格式字串來格式化兩個宣告。 此轉換會使用 C# String.Format 方法。 查看 此宣告轉換的實時示範

元素 TransformationClaimType 資料類型 備註
InputClaim inputClaim1 字串 做為字串格式 {0} 參數的宣告。
InputClaim inputClaim2 字串 做為字串格式 {1} 參數的宣告。
InputParameter stringFormat 字串 字串格式,包括 {0} 和 {1} 參數。 這個輸入參數支援 字串宣告轉換表達式
OutputClaim outputClaim 字串 叫用這個宣告轉換之後所產生的宣告。

注意

允許的大小上限為 4000。

FormatStringMultipleClaims 的範例

使用此宣告轉換來格式化具有兩個參數 {0} 和 {1}的任何字串。 下列範例會建立 具有指定格式的 displayName

<ClaimsTransformation Id="CreateDisplayNameFromFirstNameAndLastName" TransformationMethod="FormatStringMultipleClaims">
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="givenName" TransformationClaimType="inputClaim1" />
    <InputClaim ClaimTypeReferenceId="surName" TransformationClaimType="inputClaim2" />
  </InputClaims>
  <InputParameters>
    <InputParameter Id="stringFormat" DataType="string" Value="{0} {1}" />
  </InputParameters>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="displayName" TransformationClaimType="outputClaim" />
  </OutputClaims>
</ClaimsTransformation>
  • 輸入宣告:
    • inputClaim1:Joe
    • inputClaim2:Fernando
  • 輸入參數:
    • stringFormat: {0}{1}
  • 輸出宣告:
    • outputClaim: Joe Fernando

GetLocalizedStringsTransformation

將本地化的字串複製到宣告中。 查看 此宣告轉換的實時示範

元素 TransformationClaimType 資料類型 備註
OutputClaim 當地語系化字串的名稱 字串 叫用此宣告轉換之後所產生的宣告類型清單。

若要使用 GetLocalizedStringsTransformation 宣告轉換:

  1. 定義內容定義的當地語系化字串,例如 api.selfasserted

  2. ElementType項目必須 LocalizedString 設定為 GetLocalizedStringsTransformationClaimType

  3. StringId是您定義的唯一標識符,稍後會在宣告轉換中使用。

  4. 在宣告轉換中,指定要以本地化字串設定的宣告清單。 ClaimTypeReferenceId是原則中 ClaimsSchema 區段中已定義的宣告參考。 TransformationClaimType是專案 中StringIdLocalizedString定義的當地語系化字串名稱。

  5. 在自我判斷,或宣告轉換技術配置檔的宣告轉換中,參考您的宣告轉換。

  6. 將技術設定檔與內容定義產生關聯,例如 api.selfasserted。 下列範例示範如何將技術配置檔與 api.selfasserted 內容定義產生關聯。

    <Metadata>
      <Item Key="ContentDefinitionReferenceId">api.selfasserted</Item>
    </Metadata>
    

下圖顯示如何使用本地化元素來設定宣告轉換:

圖表顯示如何使用取得當地語系化字串宣告轉換。

GetLocalizedStringsTransformation 的範例

下列範例會從本地化字串中查閱電子郵件主旨、本文、您的程式代碼訊息和電子郵件的簽章。 自訂電子郵件驗證範本稍後使用的宣告。

定義英文(預設值)和西班牙文的當地語系化字串。

<Localization Enabled="true">
  <SupportedLanguages DefaultLanguage="en" MergeBehavior="Append">
    <SupportedLanguage>en</SupportedLanguage>
    <SupportedLanguage>es</SupportedLanguage>
   </SupportedLanguages>

  <LocalizedResources Id="api.localaccountsignup.en">
    <LocalizedStrings>
      <LocalizedString ElementType="GetLocalizedStringsTransformationClaimType" StringId="email_subject">Contoso account email verification code</LocalizedString>
      <LocalizedString ElementType="GetLocalizedStringsTransformationClaimType" StringId="email_message">Thanks for verifying your account!</LocalizedString>
      <LocalizedString ElementType="GetLocalizedStringsTransformationClaimType" StringId="email_code">Your code is</LocalizedString>
      <LocalizedString ElementType="GetLocalizedStringsTransformationClaimType" StringId="email_signature">Sincerely</LocalizedString>
     </LocalizedStrings>
   </LocalizedResources>
   <LocalizedResources Id="api.localaccountsignup.es">
     <LocalizedStrings>
      <LocalizedString ElementType="GetLocalizedStringsTransformationClaimType" StringId="email_subject">Código de verificación del correo electrónico de la cuenta de Contoso</LocalizedString>
      <LocalizedString ElementType="GetLocalizedStringsTransformationClaimType" StringId="email_message">Gracias por comprobar la cuenta de </LocalizedString>
      <LocalizedString ElementType="GetLocalizedStringsTransformationClaimType" StringId="email_code">Su código es</LocalizedString>
      <LocalizedString ElementType="GetLocalizedStringsTransformationClaimType" StringId="email_signature">Atentamente</LocalizedString>
    </LocalizedStrings>
  </LocalizedResources>
</Localization>

宣告轉換會使用 email_subject的值來設定宣告類型主體的值StringId

<ClaimsTransformation Id="GetLocalizedStringsForEmail" TransformationMethod="GetLocalizedStringsTransformation">
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="subject" TransformationClaimType="email_subject" />
    <OutputClaim ClaimTypeReferenceId="message" TransformationClaimType="email_message" />
    <OutputClaim ClaimTypeReferenceId="codeIntro" TransformationClaimType="email_code" />
    <OutputClaim ClaimTypeReferenceId="signature" TransformationClaimType="email_signature" />
   </OutputClaims>
</ClaimsTransformation>
  • 輸出宣告:
    • 主旨:Contoso 帳戶電子郵件驗證碼
    • 訊息:感謝您驗證您的帳戶!
    • codeIntro:您的程式代碼為
    • 簽名:真誠

GetMappedValueFromLocalizedCollection

從輸入宣告的 Restriction 集合對應專案。 查看 此宣告轉換的實時示範

元素 TransformationClaimType 資料類型 備註
InputClaim mapFromClaim 字串 包含具有 Restriction 集合之 restrictionValueClaim 宣告中要查閱之文字的宣告。
OutputClaim restrictionValueClaim 字串 包含 Restriction 集合的宣告。 叫用宣告轉換之後,這個宣告的值會包含所選取專案的值。

GetMappedValueFromLocalizedCollection 的範例

下列範例會根據錯誤索引鍵來查閱錯誤訊息描述。 responseMsg 宣告包含要呈現給使用者或傳送給信賴憑證者的錯誤訊息集合。

<ClaimType Id="responseMsg">
  <DisplayName>Error message: </DisplayName>
  <DataType>string</DataType>
  <UserInputType>Paragraph</UserInputType>
  <Restriction>
    <Enumeration Text="B2C_V1_90001" Value="You cannot sign in because you are a minor" />
    <Enumeration Text="B2C_V1_90002" Value="This action can only be performed by gold members" />
    <Enumeration Text="B2C_V1_90003" Value="You have not been enabled for this operation" />
  </Restriction>
</ClaimType>

宣告轉換會查閱專案的文字,並傳回其值。 如果使用 本地化 <LocalizedCollection>限制,宣告轉換會傳回本地化的值。

<ClaimsTransformation Id="GetResponseMsgMappedToResponseCode" TransformationMethod="GetMappedValueFromLocalizedCollection">
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="responseCode" TransformationClaimType="mapFromClaim" />
  </InputClaims>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="responseMsg" TransformationClaimType="restrictionValueClaim" />        
  </OutputClaims>
</ClaimsTransformation>
  • 輸入宣告:
    • mapFromClaim: B2C_V1_90001
  • 輸出宣告:
    • restrictionValueClaim:您無法登入,因為您是次要專案。

LookupValue

根據另一個宣告的值,從值清單中查閱宣告值。 查看 此宣告轉換的實時示範

元素 TransformationClaimType 資料類型 備註
InputClaim inputParameterId 字串 包含查閱值的宣告
InputParameter 字串 inputParameters 的集合。
InputParameter errorOnFailedLookup boolean 控制沒有相符查閱時是否傳回錯誤。
OutputClaim outputClaim 字串 叫用這個宣告轉換之後所產生的宣告。 相符 Id的值。

LookupValue 的範例

下列範例會在其中一個 inputParameters 集合中查閱功能變數名稱。 宣告轉換會在標識碼中查閱功能變數名稱,並傳回其值(應用程式識別符)。

 <ClaimsTransformation Id="DomainToClientId" TransformationMethod="LookupValue">
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="domainName" TransformationClaimType="inputParameterId" />
  </InputClaims>
  <InputParameters>
    <InputParameter Id="contoso.com" DataType="string" Value="13c15f79-8fb1-4e29-a6c9-be0d36ff19f1" />
    <InputParameter Id="microsoft.com" DataType="string" Value="0213308f-17cb-4398-b97e-01da7bd4804e" />
    <InputParameter Id="test.com" DataType="string" Value="c7026f88-4299-4cdb-965d-3f166464b8a9" />
    <InputParameter Id="errorOnFailedLookup" DataType="boolean" Value="false" />
  </InputParameters>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="domainAppId" TransformationClaimType="outputClaim" />
  </OutputClaims>
</ClaimsTransformation>
  • 輸入宣告:
    • inputParameterId:test.com
  • 輸入參數:
    • contoso.com:13c15f79-8fb1-4e29-a6c9-be0d36ff19f1
    • microsoft.com:0213308f-17cb-4398-b97e-01da7bd4804e
    • test.com:c7026f88-4299-4cdb-965d-3f166464b8a9
    • errorOnFailedLookup: false
  • 輸出宣告:
    • outputClaim: c7026f88-4299-4cdb-965d-3f166464b8a9

LookupValue 的範例,發生錯誤

當輸入參數設定為 時errorOnFailedLookupLookupValue 宣告轉換一律會從自我判斷技術配置檔或 DisplayConrtol 呼叫的驗證技術配置檔執行。true LookupNotFound自我判斷技術配置檔的元數據會控制向用戶呈現的錯誤訊息。

圖表顯示如何使用查閱值宣告轉換。

下列範例會在其中一個 inputParameters 集合中查閱功能變數名稱。 宣告轉換會查閱標識碼中的功能變數名稱,並傳回其值(應用程式識別碼),或引發錯誤訊息。

 <ClaimsTransformation Id="DomainToClientId" TransformationMethod="LookupValue">
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="domainName" TransformationClaimType="inputParameterId" />
  </InputClaims>
  <InputParameters>
    <InputParameter Id="contoso.com" DataType="string" Value="13c15f79-8fb1-4e29-a6c9-be0d36ff19f1" />
    <InputParameter Id="microsoft.com" DataType="string" Value="0213308f-17cb-4398-b97e-01da7bd4804e" />
    <InputParameter Id="test.com" DataType="string" Value="c7026f88-4299-4cdb-965d-3f166464b8a9" />
    <InputParameter Id="errorOnFailedLookup" DataType="boolean" Value="true" />
  </InputParameters>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="domainAppId" TransformationClaimType="outputClaim" />
  </OutputClaims>
</ClaimsTransformation>
  • 輸入宣告:
    • inputParameterId:live.com
  • 輸入參數:
    • contoso.com:13c15f79-8fb1-4e29-a6c9-be0d36ff19f1
    • microsoft.com:0213308f-17cb-4398-b97e-01da7bd4804e
    • test.com:c7026f88-4299-4cdb-965d-3f166464b8a9
    • errorOnFailedLookup: true
  • 錯誤:
    • 在輸入參數標識碼和 errorOnFailedLookup 清單中找不到輸入宣告值的相符專案。

NullClaim

清除指定宣告的值。 查看 此宣告轉換的實時示範

元素 TransformationClaimType 資料類型 備註
OutputClaim claim_to_null 字串 宣告的值會設定為 NULL。

NullClaim 的範例

使用此宣告轉換從 claims 屬性包中移除不必要的數據,讓會話 Cookie 會更小。 下列範例會移除宣告類型的值 TermsOfService

<ClaimsTransformation Id="SetTOSToNull" TransformationMethod="NullClaim">
  <OutputClaims>
  <OutputClaim ClaimTypeReferenceId="TermsOfService" TransformationClaimType="claim_to_null" />
  </OutputClaims>
</ClaimsTransformation>
  • 輸入宣告:
    • outputClaim:歡迎使用 Contoso 應用程式。 如果您繼續瀏覽並使用此網站,表示您同意遵守並受下列條款及條件約束...
  • 輸出宣告:
    • outputClaim: NULL

ParseDomain

取得電子郵件地址的網域部分。 查看 此宣告轉換的實時示範

元素 TransformationClaimType 資料類型 備註
InputClaim emailAddress 字串 包含電子郵件位址的宣告。
OutputClaim 網域 字串 叫用此宣告轉換之後所產生的宣告 - 網域。

ParseDomain 的範例

使用此宣告轉換來剖析使用者 @ 符號之後的功能變數名稱。 下列宣告轉換示範如何從 電子郵件 宣告剖析功能變數名稱。

<ClaimsTransformation Id="SetDomainName" TransformationMethod="ParseDomain">
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="email" TransformationClaimType="emailAddress" />
  </InputClaims>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="domainName" TransformationClaimType="domain" />
  </OutputClaims>
</ClaimsTransformation>
  • 輸入宣告:
    • emailAddress: joe@outlook.com
  • 輸出宣告:
    • 網域:outlook.com

SetClaimIfBooleansMatch

檢查布林宣告是否為 truefalse。 如果是,請使用輸入參數中 outputClaimIfMatched 存在的值來設定輸出宣告。 查看 此宣告轉換的實時示範

元素 TransformationClaimType 資料類型 備註
InputClaim claimToMatch 字串 要檢查的宣告類型。 Null 值會擲回例外狀況。
InputParameter matchTo 字串 要與 claimToMatch 輸入宣告比較的值。 可能的值: true、 或 false
InputParameter outputClaimIfMatched 字串 如果輸入宣告等於輸入參數, matchTo 要設定的值。
OutputClaim outputClaim 字串 claimToMatch如果輸入宣告等於matchTo輸入參數,則此輸出宣告會包含輸入參數的值outputClaimIfMatched

SetClaimIfBooleansMatch 的範例

例如,下列宣告轉換會檢查 hasPromotionCode 宣告的值是否等於 true 如果是,請將值傳回至 找不到促銷碼。

<ClaimsTransformation Id="GeneratePromotionCodeError" TransformationMethod="SetClaimIfBooleansMatch">
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="hasPromotionCode" TransformationClaimType="claimToMatch" />
  </InputClaims>
  <InputParameters>
    <InputParameter Id="matchTo" DataType="string" Value="true" />
    <InputParameter Id="outputClaimIfMatched" DataType="string" Value="Promotion code not found." />
  </InputParameters>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="promotionCode" TransformationClaimType="outputClaim" />
  </OutputClaims>
</ClaimsTransformation>
  • 輸入宣告:
    • claimToMatch: true
  • 輸入參數:
    • matchTo:true
    • outputClaimIfMatched:“找不到促銷碼。
  • 輸出宣告:
    • outputClaim:「找不到促銷碼」。

SetClaimsIfRegexMatch

檢查字串宣告 claimToMatchmatchTo 輸入參數是否相等,並使用輸入參數中 outputClaimIfMatched 存在的值來設定輸出宣告,以及比較結果輸出宣告,這是要設定為 truefalse 根據比較的結果。

查看 此宣告轉換的實時示範

元素 TransformationClaimType 資料類型 備註
inputClaim claimToMatch 字串 要比較的宣告類型。
InputParameter matchTo 字串 要比對的規則運算式。
InputParameter outputClaimIfMatched 字串 字串相等時要設定的值。
InputParameter extractGroups boolean [選擇性]指定 Regex 比對是否應該擷取群組值。 可能的值: true、 或 false (預設值)。
OutputClaim outputClaim 字串 如果正則表示式相符,此輸出宣告會包含輸入參數的值 outputClaimIfMatched 。 或者,如果沒有相符專案,則為 Null。
OutputClaim regexCompareResultClaim boolean 正則表達式比對結果輸出宣告類型,這是要設定為 truefalse 根據比對的結果。
OutputClaim 宣告的名稱 字串 如果 extractGroups 輸入參數設定為 true,則叫用此宣告轉換之後所產生的宣告類型清單。 宣告的名稱必須符合 Regex 組名。

SetClaimsIfRegexMatch 的範例

根據電話號碼正則表示式模式,檢查提供的電話號碼是否有效。

<ClaimsTransformation Id="SetIsPhoneRegex" TransformationMethod="SetClaimsIfRegexMatch">
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="phone" TransformationClaimType="claimToMatch" />
  </InputClaims>
  <InputParameters>
    <InputParameter Id="matchTo" DataType="string" Value="^[0-9]{4,16}$" />
    <InputParameter Id="outputClaimIfMatched" DataType="string" Value="iPhone" />
  </InputParameters>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="validationResult" TransformationClaimType="outputClaim" />
    <OutputClaim ClaimTypeReferenceId="isPhoneBoolean" TransformationClaimType="regexCompareResultClaim" />
  </OutputClaims>
</ClaimsTransformation>
  • 輸入宣告:
    • claimToMatch: “64854114520”
  • 輸入參數:
    • matchTo: “^[0-9]{4,16}$”
    • outputClaimIfMatched: “Phone”
  • 輸出宣告:
    • outputClaim: “iPhone”
    • regexCompareResultClaim: true

具有擷取群組的 SetClaimsIfRegexMatch 範例

檢查提供的電子郵件位址是否有效,並傳回電子郵件別名。 請參閱 此宣告轉換的即時示範 與擷取群組。

<ClaimsTransformation Id="GetAliasFromEmail" TransformationMethod="SetClaimsIfRegexMatch">
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="email" TransformationClaimType="claimToMatch" />
  </InputClaims>
  <InputParameters>
    <InputParameter Id="matchTo" DataType="string" Value="(?&lt;mailAlias&gt;.*)@(.*)$" />
    <InputParameter Id="outputClaimIfMatched" DataType="string" Value="isEmail" />
    <InputParameter Id="extractGroups" DataType="boolean" Value="true" />
  </InputParameters>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="validationResult" TransformationClaimType="outputClaim" />
    <OutputClaim ClaimTypeReferenceId="isEmailString" TransformationClaimType="regexCompareResultClaim" />
    <OutputClaim ClaimTypeReferenceId="mailAlias" />
  </OutputClaims>
</ClaimsTransformation>
  • 輸入宣告:
    • claimToMatch: “emily@contoso.com”
  • 輸入參數:
    • matchTo(?&lt;mailAlias&gt;.*)@(.*)$
    • outputClaimIfMatched: “isEmail”
    • extractGroups:true
  • 輸出宣告:
    • outputClaim: “isEmail”
    • regexCompareResultClaim: true
    • mailAlias: emily

SetClaimsIfStringsAreEqual

檢查字串宣告和matchTo輸入參數是否相等,並將輸出宣告設定為 和 stringMatchMsgCode 輸入參數中的stringMatchMsg值,以及比較結果輸出宣告,這是要設定為truefalse根據比較結果的結果。

查看 此宣告轉換的實時示範

元素 TransformationClaimType 資料類型 備註
InputClaim inputClaim 字串 要比較的宣告類型。
InputParameter matchTo 字串 要與比較的 inputClaim字串。
InputParameter stringComparison 字串 可能的值: OrdinalOrdinalIgnoreCase
InputParameter stringMatchMsg 字串 如果字串相等,要設定的第一個值。
InputParameter stringMatchMsgCode 字串 如果字串相等,要設定的第二個值。
OutputClaim outputClaim1 字串 如果字串相等,此輸出宣告會包含輸入參數的值 stringMatchMsg
OutputClaim outputClaim2 字串 如果字串相等,此輸出宣告會包含輸入參數的值 stringMatchMsgCode
OutputClaim stringCompareResultClaim boolean 比較結果輸出宣告類型,這是要設定為 truefalse 根據比較的結果。

SetClaimsIfStringsAreEqual 的範例

您可以使用此宣告轉換來檢查宣告是否等於您指定的值。 例如,下列宣告轉換會檢查 termsOfUseConsentVersion 宣告的值是否等於 v1 如果是,請將值變更為 v2

<ClaimsTransformation Id="CheckTheTOS" TransformationMethod="SetClaimsIfStringsAreEqual">
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="termsOfUseConsentVersion" TransformationClaimType="inputClaim" />
  </InputClaims>
  <InputParameters>
    <InputParameter Id="matchTo" DataType="string" Value="v1" />
    <InputParameter Id="stringComparison" DataType="string" Value="ordinalIgnoreCase" />
    <InputParameter Id="stringMatchMsgCode" DataType="string" Value="B2C_V1_90005" />
    <InputParameter Id="stringMatchMsg" DataType="string" Value="The TOS is upgraded to v2" />
  </InputParameters>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="termsOfUseConsentVersion" TransformationClaimType="outputClaim1" />
    <OutputClaim ClaimTypeReferenceId="termsOfUseConsentVersionUpgradeCode" TransformationClaimType="outputClaim2" />
    <OutputClaim ClaimTypeReferenceId="termsOfUseConsentVersionUpgradeResult" TransformationClaimType="stringCompareResultClaim" />
  </OutputClaims>
</ClaimsTransformation>
  • 輸入宣告:
    • inputClaim:v1
  • 輸入參數:
    • matchTo:V1
    • stringComparison: ordinalIgnoreCase
    • stringMatchMsgCode:B2C_V1_90005
    • stringMatchMsg:TOS 已升級至 v2
  • 輸出宣告:
    • outputClaim1:B2C_V1_90005
    • outputClaim2:TOS 已升級至 v2
    • stringCompareResultClaim: true

SetClaimsIfStringsMatch

檢查字串宣告和 matchTo 輸入參數是否相等,並使用輸入參數中 outputClaimIfMatched 存在的值來設定輸出宣告,以及比較結果輸出宣告,這是要設定為 truefalse 根據比較的結果。

查看 此宣告轉換的實時示範

元素 TransformationClaimType 資料類型 備註
InputClaim claimToMatch 字串 要比較的宣告類型。
InputParameter matchTo 字串 要與 inputClaim 比較的字串。
InputParameter stringComparison 字串 可能的值: OrdinalOrdinalIgnoreCase
InputParameter outputClaimIfMatched 字串 字串相等時要設定的值。
OutputClaim outputClaim 字串 如果字串相等,此輸出宣告會包含輸入參數的值 outputClaimIfMatched 。 或者,如果字串不相符,則為 Null。
OutputClaim stringCompareResultClaim boolean 比較結果輸出宣告類型,這是要設定為 truefalse 根據比較的結果。

SetClaimsIfStringsMatch 的範例

例如,下列宣告轉換會檢查 ageGroup 宣告的值是否等於 Minor 如果是,請將值傳回至 B2C_V1_90001

<ClaimsTransformation Id="SetIsMinor" TransformationMethod="SetClaimsIfStringsMatch">
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="ageGroup" TransformationClaimType="claimToMatch" />
  </InputClaims>
  <InputParameters>
    <InputParameter Id="matchTo" DataType="string" Value="Minor" />
    <InputParameter Id="stringComparison" DataType="string" Value="ordinalIgnoreCase" />
    <InputParameter Id="outputClaimIfMatched" DataType="string" Value="B2C_V1_90001" />
  </InputParameters>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="isMinor" TransformationClaimType="outputClaim" />
    <OutputClaim ClaimTypeReferenceId="isMinorResponseCode" TransformationClaimType="stringCompareResultClaim" />
  </OutputClaims>
</ClaimsTransformation>
  • 輸入宣告:
    • claimToMatch: Minor
  • 輸入參數:
    • matchTo:Minor
    • stringComparison: ordinalIgnoreCase
    • outputClaimIfMatched:B2C_V1_90001
  • 輸出宣告:
    • isMinorResponseCode: true
    • isMinor: B2C_V1_90001

StringContains

判斷指定的子字串是否發生在輸入宣告內。 結果是具有 或 falsetrue的新布爾值宣告。 true 如果值參數發生在這個字串內,則為 ,否則為 false

查看 此宣告轉換的實時示範

元素 TransformationClaimType 資料類型 備註
InputClaim inputClaim 字串 要搜尋的宣告類型。
InputParameter contains 字串 要搜尋的值。
InputParameter ignoreCase 字串 指定此比較是否應該忽略所比較字串的案例。
OutputClaim outputClaim 字串 叫用這個宣告轉換之後所產生的宣告。 如果子字串發生在輸入宣告內,則為布爾指標。

StringContains 的範例

使用此宣告轉換來檢查字串宣告類型是否包含子字串。 下列範例會檢查字串宣告類型是否roles包含管理員的值

<ClaimsTransformation Id="CheckIsAdmin" TransformationMethod="StringContains">
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="roles" TransformationClaimType="inputClaim"/>
  </InputClaims>
  <InputParameters>
    <InputParameter  Id="contains" DataType="string" Value="admin"/>
    <InputParameter  Id="ignoreCase" DataType="string" Value="true"/>
  </InputParameters>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="isAdmin" TransformationClaimType="outputClaim"/>
  </OutputClaims>
</ClaimsTransformation>
  • 輸入宣告:
    • inputClaim:“Admin, Approver, Editor”
  • 輸入參數:
    • contains: “admin,”
    • ignoreCase: true
  • 輸出宣告:
    • outputClaim: true

StringSubstring

從指定位置的字元開始擷取部分的字串宣告類型,並傳回指定數目的字元。 查看 此宣告轉換的實時示範

元素 TransformationClaimType 資料類型 備註
InputClaim inputClaim 字串 包含字串的宣告類型。
InputParameter startIndex int 這個執行個體中子字串之以零為起始的起始字元位置。
InputParameter length int 子字串中的字元數。
OutputClaim outputClaim 字串 字串,相當於這個實例中 startIndex 開始之長度的子字串,如果 startIndex 等於這個實例的長度且 length 為零,則為 Empty。

StringSubstring 的範例

例如,取得電話號碼國家/地區前置詞。

<ClaimsTransformation Id="GetPhonePrefix" TransformationMethod="StringSubstring">
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="phoneNumber" TransformationClaimType="inputClaim" />
  </InputClaims>
<InputParameters>
  <InputParameter Id="startIndex" DataType="int" Value="0" />
  <InputParameter Id="length" DataType="int" Value="2" />
</InputParameters>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="phonePrefix" TransformationClaimType="outputClaim" />
  </OutputClaims>
</ClaimsTransformation>
  • 輸入宣告:
    • inputClaim: “+1644114520”
  • 輸入參數:
    • startIndex: 0
    • length:2
  • 輸出宣告:
    • outputClaim: “+1”

StringReplace

搜尋宣告類型字串中的指定值,並傳回新的宣告類型字串,其中目前字串中所有出現的指定字串都會取代為另一個指定的字串。

查看 此宣告轉換的實時示範

元素 TransformationClaimType 資料類型 備註
InputClaim inputClaim 字串 包含字串的宣告類型。
InputParameter oldValue 字串 要搜尋的字串。
InputParameter newValue 字串 要取代所有專案之的字串 oldValue
OutputClaim outputClaim boolean 與目前字串相等的字串,不同之處在於 oldValue 的所有實例都會取代為 newValue。 如果目前實例中找不到 oldValue,此方法會傳回未變更的目前實例。

StringReplace 的範例

例如,藉由移除字元, - 將電話號碼正規化

<ClaimsTransformation Id="NormalizePhoneNumber" TransformationMethod="StringReplace">
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="phoneNumber" TransformationClaimType="inputClaim" />
  </InputClaims>
<InputParameters>
  <InputParameter Id="oldValue" DataType="string" Value="-" />
  <InputParameter Id="newValue" DataType="string" Value="" />
</InputParameters>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="phoneNumber" TransformationClaimType="outputClaim" />
  </OutputClaims>
</ClaimsTransformation>
  • 輸入宣告:
    • inputClaim: “+164-411-452-054”
  • 輸入參數:
    • oldValue: “-”
    • newValue: “”
  • 輸出宣告:
    • outputClaim: “+164411452054”

StringJoin

使用每個專案或成員之間的指定分隔符,串連指定字串集合宣告類型的專案。

查看 此宣告轉換的實時示範

元素 TransformationClaimType 資料類型 備註
InputClaim inputClaim stringCollection 包含要串連之字串的集合。
InputParameter delimiter 字串 要做為分隔符的字串,例如逗號 ,
OutputClaim outputClaim 字串 字串,由字串集合的成員 inputClaim 組成,並以 delimiter 輸入參數分隔。

StringJoin 的範例

下列範例會採用使用者角色的字串集合,並將它轉換成逗號分隔符字串。 您可以使用此方法將字串集合儲存在 Azure AD B2C 使用者帳戶中。 稍後,當您從目錄讀取帳戶時,請使用 StringSplit 將逗號分隔符字串轉換回字串集合。

<ClaimsTransformation Id="ConvertRolesStringCollectionToCommaDelimiterString" TransformationMethod="StringJoin">
  <InputClaims>
   <InputClaim ClaimTypeReferenceId="roles" TransformationClaimType="inputClaim" />
  </InputClaims>
  <InputParameters>
    <InputParameter DataType="string" Id="delimiter" Value="," />
  </InputParameters>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="rolesCommaDelimiterConverted" TransformationClaimType="outputClaim" />
  </OutputClaims>
</ClaimsTransformation>
  • 輸入宣告:
    • inputClaim[ "Admin", "Author", "Reader" ]
  • 輸入參數:
    • 分隔符:“,”
  • 輸出宣告:
    • outputClaim"Admin,Author,Reader"

StringSplit

傳回字串數位,其中包含這個實例中以指定字串專案分隔的子字串。 查看 此宣告轉換的實時示範

元素 TransformationClaimType 資料類型 備註
InputClaim inputClaim 字串 包含要分割之子字串的字串宣告類型。
InputParameter delimiter 字串 要做為分隔符的字串,例如逗號 ,
OutputClaim outputClaim stringCollection 字串集合,其專案包含這個字串中以輸入參數分隔的 delimiter 子字串。

注意

將會移除 stringCollection 中的任何 OutputClaim 現有專案。

StringSplit 的範例

下列範例會採用使用者角色的逗號分隔符字串,並將它轉換成字串集合。

<ClaimsTransformation Id="ConvertRolesToStringCollection" TransformationMethod="StringSplit">
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="rolesCommaDelimiter" TransformationClaimType="inputClaim" />
  </InputClaims>
  <InputParameters>
  <InputParameter DataType="string" Id="delimiter" Value="," />
    </InputParameters>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="roles" TransformationClaimType="outputClaim" />
  </OutputClaims>
</ClaimsTransformation>
  • 輸入宣告:
    • inputClaimAdmin,Author,Reader
  • 輸入參數:
    • 分隔符:“,”
  • 輸出宣告:
    • outputClaim[ "Admin", "Author", "Reader" ]

字串宣告轉換表達式

Azure AD B2C 自定義原則中的宣告轉換表達式提供租用戶標識碼和技術配置檔標識碼的相關內容資訊。

運算式 描述 範例
{TechnicalProfileId} 技術配置檔識別碼名稱。 Facebook-OAUTH
{RelyingPartyTenantId} 信賴憑證者原則的租用戶標識符。 your-tenant.onmicrosoft.com
{TrustFrameworkTenantId} 信任架構的租用戶標識碼。 your-tenant.onmicrosoft.com

下一步