2017-10-16 147 views
0

我正在尋找一種方式來添加一個emails要求(電子郵件的集合),爲Azure的AD B2C的自定義策略。此應用程序聲明可從Azure門戶直接獲得,但我無法在需要創建的自定義策略中找到實現此方法的方法。Azure的AD B2C - 「電子郵件」要求在定製策略

我要實現的是讓Azure的AD B2C認證爲我的Web應用程序的用戶和Azure的AD身份驗證自定義身份驗證提供程序的員工,使這意味着我將需要添加emails要求兩次 - 本地帳戶和Azure的AD。

我跟着this guide to make custom policy所以我增加了一個新的ClaimsProvider到TrustFrameworkExtensions.xml文件。

當我下載註冊&登錄天青門戶網站產生了以後,我可以看到下面的輸出聲明的政策:

<OutputClaim ClaimTypeReferenceId="emails" /> 

我試圖把該行到我的自定義策略,但它不返回emails要求。

任何想法?

+1

哪裏你是否試圖在將它放入令牌之前獲取電子郵件地址?它是一個Rest API,還是僅僅是一個本地帳戶登錄?如果你有一個新的技術資料,那麼在問題中增加這個問題是很好的。否則,請提及初學者包和您的場景。 –

回答

0

我無法找到答案,這無論是 - 它看起來像「電子郵件」要求正在由一個自定義OutputClaimsTransformation返回,其中的配置不是樣品中可用。

我沒有找到,因此這個答案這幫助,但它涵蓋更新「otherMails」要求爲新用戶,我對誰我不能以這種方式更新的基本方針政策的現有用戶。

看來,電子郵件是由與「signInNames」數組中的第一項串聯「otherMails」(社會註冊等的情況下)填充。

我結束了做以下獲得「電子郵件」要求動態創建的。

在TrustFrameworkExtensions.xml創建一個新的ClaimType

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

在TrustFrameworkExtensions.xml創建3個新ClaimsTransformations

<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:

<!-- 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> 

只是SignUpOrSignIn

<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" /> 

編輯PolicyProfile TechnicalProfile最後一步(SendClaims)前添加一個新的OrchestrationStep到SignUpOrSignIn UserJourney並添加OutputClaim:

<OutputClaim ClaimTypeReferenceId="emails" />