我有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个扩展声明。
答案 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>