2017-10-16 44 views
0

Azure AD B2Cのカスタムポリシーにemailsクレーム(電子メールのコレクション)を追加する方法を探しています。このアプリケーションの主張はAzure Portalから直接入手できますが、作成する必要があるカスタムポリシーでこれを実装する方法が見つかりません。Azure AD B2C - カスタムポリシーで「電子メール」クレーム

私が達成したいのは、WebAppユーザーとAzure AD認証を従業員用のカスタム認証プロバイダとして使用することです。つまり、ローカルアカウントとAzure ADに対してemailsクレームを2回追加する必要があります。

私はthis guide to make custom policyに続き、TrustFrameworkExtensions.xmlファイルに新しいClaimsProviderを追加しました。

私はAzureのポータルで作成したポリシーで&サインサインアップダウンロードすると、私は次の出力クレーム見ることができます:私は私のカスタムポリシーにその行を入れてみましたが、それはemails請求を返さない

<OutputClaim ClaimTypeReferenceId="emails" /> 

を。

アイデア?

+1

それをトークンに入れる前から電子メールアドレスを取得しようとしていますか?それはRest APIですか、ローカルアカウントのサインインですか?新しいテクニカルプロファイルをお持ちの場合は、質問に追加することをお勧めします。それ以外の場合は、スターターパックとシナリオについて言及してください。 –

答えて

0

私はこの回答を見つけることができませんでした。カスタムのOutputClaimsTransformationによって返された "emails"クレームのように見えますが、その構成はサンプルでは利用できません。

この回答は役に立ちましたが、NEWユーザの「otherMails」クレームを更新し、既存のユーザーに基本ポリシーを適用してもらえませんでした。

"anotherMails"(ソーシャルサインアップの場合)を "signInNames"配列の最初のエントリと連結して、電子メールが作成されているようです。

「電子メール」の主張を動的に作成するために、次の作業を行いました。

<ClaimType Id="emails"> 
    <DisplayName>Emails</DisplayName> 
    <DataType>stringCollection</DataType> 
    <UserHelpText>User's email addresses</UserHelpText> 
    </ClaimType> 

<ClaimsTransformation Id="GetFirstOtherMail" TransformationMethod="GetSingleItemFromStringCollection"> 
    <InputClaims> 
     <InputClaim ClaimTypeReferenceId="otherMails" TransformationClaimType="collection" /> 
    </InputClaims> 
    <OutputClaims> 
     <OutputClaim ClaimTypeReferenceId="firstOtherMail" TransformationClaimType="extractedItem" /> 
    </OutputClaims> 
    </ClaimsTransformation> 

    <ClaimsTransformation Id="CopyFirstOtherMailToEmail" TransformationMethod="AddItemToStringCollection"> 
    <InputClaims> 
     <InputClaim ClaimTypeReferenceId="firstOtherMail" TransformationClaimType="item" /> 
     <InputClaim ClaimTypeReferenceId="emails" TransformationClaimType="collection" /> 
    </InputClaims> 
    <OutputClaims> 
     <OutputClaim ClaimTypeReferenceId="emails" TransformationClaimType="collection" /> 
    </OutputClaims> 
    </ClaimsTransformation> 

    <ClaimsTransformation Id="CopySignInNamesEmailToEmails" TransformationMethod="AddItemToStringCollection"> 
    <InputClaims> 
     <InputClaim ClaimTypeReferenceId="signInNames.emailAddress" TransformationClaimType="item" /> 
     <InputClaim ClaimTypeReferenceId="emails" TransformationClaimType="collection" /> 
    </InputClaims> 
    <OutputClaims> 
     <OutputClaim ClaimTypeReferenceId="emails" TransformationClaimType="collection" /> 
    </OutputClaims> 
    </ClaimsTransformation> 

はTrustFrameworkExtensions.xmlで新しいTechnicalProfileを作成TrustFrameworkExtensions.xmlに3つの新しいClaimsTransformationsを作成TrustFrameworkExtensions.xmlに新しいClaimTypeを作成します。

<!-- The following technical profile is used to create the emails collection after user authenticates. --> 
    <TechnicalProfile Id="AAD-UserCreateEmailsClaim"> 
     <Metadata> 
     <Item Key="Operation">Read</Item> 
     <Item Key="RaiseErrorIfClaimsPrincipalDoesNotExist">true</Item> 
     </Metadata> 
     <IncludeInSso>false</IncludeInSso> 
     <InputClaims> 
     <InputClaim ClaimTypeReferenceId="objectId" Required="true" /> 
     </InputClaims> 
     <OutputClaims> 
     <OutputClaim ClaimTypeReferenceId="emails" />   
     </OutputClaims> 
     <OutputClaimsTransformations> 
     <OutputClaimsTransformation ReferenceId="GetFirstOtherMail"/> 
     <OutputClaimsTransformation ReferenceId="CopySignInNamesEmailToEmails"/> 
     <OutputClaimsTransformation ReferenceId="CopyFirstOtherMailToEmail"/> 
     </OutputClaimsTransformations> 
     <IncludeTechnicalProfile ReferenceId="AAD-Common" /> 
    </TechnicalProfile> 

編集し

<OrchestrationStep Order="8" Type="ClaimsExchange"> 
     <ClaimsExchanges> 
     <!-- create the emails claim combining signInNames and otherMails --> 
     <ClaimsExchange Id="AADUserCreateEmailsClaim" TechnicalProfileReferenceId="AAD-UserCreateEmailsClaim" /> 
     </ClaimsExchanges> 
    </OrchestrationStep> 


    <OrchestrationStep Order="9" Type="SendClaims" CpimIssuerTechnicalProfileReferenceId="JwtIssuer" /> 

SignUpOrSignInでちょうど最後のステップ(SendClaims)前SignUpOrSignIn UserJourneyにPolicyProfile TechnicalProfileを新しいOrchestrationStepを追加し、OutputClaimを追加します。

<OutputClaim ClaimTypeReferenceId="emails" /> 
関連する問題