在Azure AD B2C中读取扩展声明

时间:2017-12-01 05:21:58

标签: azure-ad-b2c

我有2个声明,我想存储在目录中以供我的应用程序使用。这些不可供用户编辑,但可供应用程序从令牌中读取。

BuiltIn策略能够检索声明,但是,使用自定义策略检索这些声明时,我没有取得任何成功。

阅读文章“在自定义配置文件编辑策略中创建和使用自定义属性”的Next Steps,需要将声明添加到RP和TechnicalProfile以从目录中读取。因此,我更新了RP以及从目录中读取的TP,例如

<TechnicalProfile Id="AAD-UserReadUsingAlternativeSecurityId">
<TechnicalProfile Id="AAD-UserReadUsingObjectId">
<TechnicalProfile Id="SelfAsserted-LocalAccountSignin-Email">
<TechnicalProfile Id="AAD-UserReadUsingEmailAddress">

无法弄清楚可能缺少什么来检索2个扩展声明。

2 个答案:

答案 0 :(得分:5)

假设您正在阅读用户旅程中的自定义声明并通过Azure AD Graph API编写它们,那么您必须:

1:将自定义声明<ClaimType />添加到基本策略。

<ClaimType Id="extension_UserAttribute1">
  <DisplayName>User Attribute 1</DisplayName>
  <DataType>string</DataType>
</ClaimType>
<ClaimType Id="extension_UserAttribute2">
  <DisplayName>User Attribute 2</DisplayName>
  <DataType>string</DataType>
</ClaimType>

2:将the extensions app的应用程序和对象标识符添加到“AAD-Common”技术配置文件中,该配置文件是从Azure AD B2C目录中读取自定义声明所必需的。

<TechnicalProfile Id="AAD-Common">
  <DisplayName>Azure Active Directory</DisplayName>
  <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.AzureActiveDirectoryProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
  <Metadata>
    <Item Key="ApplicationObjectId">Insert the object identifier for the b2c-extensions-app application here</Item>
    <Item Key="ClientId">Insert the application identifier for the b2c-extensions-app application here</Item>
  </Metadata>
  <CryptographicKeys>
    <Key Id="issuer_secret" StorageReferenceId="TokenSigningKeyContainer" />
  </CryptographicKeys>
  ...
</TechnicalProfile>

注意:如果您要在内置策略和自定义策略中阅读自定义声明,则必须使用内置 b2c-的应用程序和对象标识符extensions {app 应用程序,而不是Azure Active Directory B2C: Creating and using custom attributes in a custom profile edit policy教程建议的自定义扩展程序。

3:将自定义声明<OutputClaim />添加到以下技术配置文件中:

“AAD-UserReadUsingObjectId”用于本地帐户登录和配置文件编辑

社交帐户登录和个人资料编辑的“AAD-UserReadUsingAlternativeSecurityId”

“LocalAccountDiscoveryUsingEmailAddress”和“AAD-UserReadUsingEmailAddress”,用于重置本地帐户密码

<OutputClaims>
  ...
  <OutputClaim ClaimTypeReferenceId="extension_UserAttribute1" />
  <OutputClaim ClaimTypeReferenceId="extension_UserAttribute2" />
</OutputClaims>

4:在任何依赖方政策中将自定义声明发布为<OutputClaim />

答案 1 :(得分:1)

感谢@ChrisPadget。对于任何仍在挣扎的人。确保从AD读取数据的UserJourney步骤实际上在您的User Journey中可用。就我而言,我必须添加:

<OrchestrationStep Order="2" Type="ClaimsExchange">
    <ClaimsExchanges>
        <ClaimsExchange Id="AADUserReadWithObjectId" TechnicalProfileReferenceId="AAD-UserReadUsingObjectId" />
    </ClaimsExchanges>
</OrchestrationStep>