我有一个使用Azure AD B2C租户的现有应用程序“A”。在注册过程中,系统会要求用户输入一个存储在名为“NumberA”的索赔中的号码(特定于此应用程序“A”)。
现在我想创建一个新的应用程序“B”,我希望我的租户的现有用户能够登录到应用程序“B”。但在他们使用之前,必须提示他们输入一个新号码(特定于申请“B”),该号码存储在名为“NumberB”的Claim中。
当应用程序“B”的新用户自己注册时,他们只需输入“B”的数字。
我认为这一定是可能的,但我不知道该怎么做。
创建新的自定义策略“B2C_AppB_signup_signin”? 然后在新的“Extensions”文件中添加新的Claim“NumberB”并“覆盖”技术配置文件(AAD-UserWriteUsingLogonEmail,AAD-UserReadUsingEmailAddress等)
或者这是错误的道路..
答案 0 :(得分:2)
你走在正确的轨道上。
这可以通过创建两个用户旅程来实现 - 一个用于应用程序A,另一个用于应用程序B - 然后在两个用户旅程中的业务流程步骤中添加ClaimsExist
前提条件,提示特定于应用程序权利要求。
例如:对于应用B的注册或登录用户旅程,您可以在从Azure Active Directory读取用户对象后添加以下业务流程步骤(在最终用户使用现有帐户登录或注册了一个新帐户),检查此用户对象是否存在“extension_NumberB”声明,如果没有,则提示输入:
<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-Registration”技术资料:
<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 />
添加。 / p>
答案 1 :(得分:1)
概述的选项很好,但您必须设法制定2个政策,如果您决定拥有第3个或第4个客户,则需要管理的政策越多。
我建议您创建一个函数应用程序的休息调用,该应用程序接受应用程序{OIDC:ClientId}的client_id,然后根据它返回声明的值。
这样您只有一个策略,然后您可以修改功能应用程序而不是策略
我在这里详细说明了这种方法
Get the Azure AD B2C Application client id in the custom policy