2017-10-04 7 views
0

Azure AD B2Cテナントを使用している既存のアプリケーション「A」があります。登録中に、ユーザーは「NumberA」という名前のクレームに格納されている番号(このアプリケーション「A」に固有)を入力するよう求められました。同じAzure AD B2Cテナントを使用して新しいアプリケーションを申請する方法

今、新しいアプリケーション "B"を作成したいと思います。テナントの既存のユーザーがアプリケーション "B"にログインできるようにしたいと思います。しかし、彼らはそれを使用する前に、 "NumberB"という名前のクレームに格納されている新しい番号(アプリケーション "B"に固有)を入力するように促されなければなりません。

アプリケーション「B」の新規ユーザーが登録するときには、「B」の番号を入力するだけで済みます。

私はこれが可能でなければならないと考えていますが、これを行う方法がわかりません。

新しいカスタムポリシー "B2C_AppB_signup_signin"を作成しますか? そして新しい「拡張」ファイルと「オーバーライド」の技術的なプロファイル(AAD-UserWriteUsingLogonEmailなどAAD-UserReadUsingEmailAddress)

またはこの間違ったパスで、新しいクレーム「NumberB」を追加します。..

+0

をこのアプローチを詳しく説明している機能のアプリではなく、政策

を変更することができます

その方法! – spottedmahn

答えて

2

あなたは正しい道を歩いています。

これは、アプリケーションAとアプリケーションBの2つのユーザーの旅程を作成し、アプリケーション固有の要求を求めるユーザーの両方の旅のオーケストレーションステップにClaimsExistの前提条件を追加することで実現できます。

例:アプリケーションBのサインアップまたはサインインユーザーの旅程では、エンドユーザーが既存のアカウントでサインインした後で、ユーザーオブジェクトがAzure Active Directoryから読み取られた後で、次のオーケストレーションステップを追加できます

<OrchestrationStep Order="4" Type="ClaimsExchange"> 
    <Preconditions> 
    <Precondition Type="ClaimsExist" ExecuteActionsIf="true"> 
     <Value>extension_NumberB</Value> 
     <Action>SkipThisOrchestrationStep</Action> 
    </Precondition> 
    </Preconditions> 
    <ClaimsExchanges> 
    <ClaimsExchange Id="SelfAssertedApplicationBRegistrationExchange" TechnicalProfileReferenceId="SelfAsserted-ApplicationB-Registration" /> 
    </ClaimsExchanges> 
</OrchestrationStep> 

次に「SelfAsserted-ApplicationBを-登録」の技術的なプロファイルを追加:または「extension_NumberB」主張は、それがために、次に求められます。このユーザーオブジェクトのために存在していない場合かどうかをチェックする、)新しいアカウントでサインアップ:

<TechnicalProfile Id="SelfAsserted-ApplicationB-Registration"> 
    <DisplayName>Application B Registration</DisplayName> 
    <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.SelfAssertedAttributeProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" /> 
    <Metadata> 
    <Item Key="ContentDefinitionReferenceId">api.selfasserted.applicationb.registration</Item> 
    </Metadata> 
    <CryptographicKeys> 
    <Key Id="issuer_secret" StorageReferenceId="B2C_1A_TokenSigningKeyContainer" /> 
    </CryptographicKeys> 
    <IncludeInSso>false</IncludeInSso> 
    <InputClaims> 
    <InputClaim ClaimTypeReferenceId="objectId" Required="true" /> 
    </InputClaims> 
    <OutputClaims> 
    <OutputClaim ClaimTypeReferenceId="extension_NumberB" Required="true" /> 
    </OutputClaims> 
    <ValidationTechnicalProfiles> 
    <ValidationTechnicalProfile ReferenceId="AAD-UserWriteProfileUsingObjectId" /> 
    </ValidationTechnicalProfiles> 
</TechnicalProfile> 

次に、「extension_NumberB」クレームを「AAD-UserReadUsingObjectId」技術プロファイルの場合は<OutputClaim />、「AAD-UserWriteProfileUsingObjectId」のテクニカルプロファイルの場合は<PersistedClaim />として追加する必要があります。

+0

私はほとんどこれを手に入れました。 「SelfAsserted-ApplicationB-Registration」はどのように見えますか? – Rikkert

+0

私は上記の答えを "SelfAsserted-ApplicationB-Registration"技術プロフィールで更新しました。 –

1

2つのポリシーを管理する必要がありますが、3番目または4番目のクライアントに管理するポリシーを増やす必要がありますが、その概要は良好です。

アプリ{OIDC:ClientId}のclient_idを受け入れ、それに基づいてクレームの価値を返す関数アプリケーションの残りの呼び出しを作成することをお勧めします。あなたがしかつのポリシーを持っていると、あなたは、私はここで働いてます

Get the Azure AD B2C Application client id in the custom policy

+0

私は確かにこのソリューションをもっと多くのクライアントがあると思うでしょう。あなたが言ったように、それはポリシーファイルのメンテナンスを保存します。しかし、まず私は原則を働かせたいと思っています。 – Rikkert

関連する問題