如何使用相同的Azure AD B2C租户提示新应用程序的新声明

时间:2017-10-04 14:03:23

标签: azure-ad-b2c

我有一个使用Azure AD B2C租户的现有应用程序“A”。在注册过程中,系统会要求用户输入一个存储在名为“NumberA”的索赔中的号码(特定于此应用程序“A”)。

现在我想创建一个新的应用程序“B”,我希望我的租户的现有用户能够登录到应用程序“B”。但在他们使用之前,必须提示他们输入一个新号码(特定于申请“B”),该号码存储在名为“NumberB”的Claim中。

当应用程序“B”的新用户自己注册时,他们只需输入“B”的数字。

我认为这一定是可能的,但我不知道该怎么做。

创建新的自定义策略“B2C_AppB_signup_signin”? 然后在新的“Extensions”文件中添加新的Claim“NumberB”并“覆盖”技术配置文件(AAD-UserWriteUsingLogonEmail,AAD-UserReadUsingEmailAddress等)

或者这是错误的道路..

2 个答案:

答案 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