use*_*730 4 azure azure-active-directory azure-ad-b2c identity-experience-framework
我已通过此示例实施了邀请策略(通过向用户发送电子邮件链接来邀请用户访问该站点)https://github.com/azure-ad-b2c/samples/tree/master/policies/invite
我有这个用户旅程
<UserJourney Id="SignUpInvitation">
<OrchestrationSteps>
<OrchestrationStep Order="1" Type="GetClaims" CpimIssuerTechnicalProfileReferenceId="IdTokenHint_ExtractClaims" />
<OrchestrationStep Order="2" Type="ClaimsExchange">
<Preconditions>
<Precondition Type="ClaimsExist" ExecuteActionsIf="true">
<Value>email</Value>
<Action>SkipThisOrchestrationStep</Action>
</Precondition>
</Preconditions>
<ClaimsExchanges>
<ClaimsExchange Id="SelfAsserted-Unsolicited" TechnicalProfileReferenceId="SelfAsserted-Unsolicited"/>
</ClaimsExchanges>
</OrchestrationStep>
<OrchestrationStep Order="3" Type="ClaimsExchange">
<ClaimsExchanges>
<ClaimsExchange Id="LocalAccountSignUpWithReadOnlyEmail" TechnicalProfileReferenceId="LocalAccountSignUpWithReadOnlyEmail"/>
</ClaimsExchanges>
</OrchestrationStep>
<OrchestrationStep Order="4" Type="ClaimsExchange">
<ClaimsExchanges>
<ClaimsExchange Id="AADUserReadWithObjectId" TechnicalProfileReferenceId="AAD-UserReadUsingObjectId" />
</ClaimsExchanges>
</OrchestrationStep>
<OrchestrationStep Order="5" Type="SendClaims" CpimIssuerTechnicalProfileReferenceId="JwtIssuer"/>
</OrchestrationSteps>
<ClientDefinition ReferenceId="DefaultWeb"/>
</UserJourney>
Run Code Online (Sandbox Code Playgroud)
在第一步中,我从 JWT 中提取声明。一封电子邮件和一份自定义声明,
<TechnicalProfiles>
<TechnicalProfile Id="IdTokenHint_ExtractClaims">
<DisplayName> My ID Token Hint TechnicalProfile</DisplayName>
<Protocol Name="None" />
<Metadata>
<Item Key="METADATA">https://mywebsite.com/internal/v1/invitation/.well-known/openid-configuration</Item>
</Metadata>
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="email" />
<OutputClaim ClaimTypeReferenceId="extension_DBId" DefaultValue="1" />
</OutputClaims>
</TechnicalProfile>
</TechnicalProfiles>
Run Code Online (Sandbox Code Playgroud)
(请注意,我1
为自定义声明设置了默认值)
然后,我有将用户写入目录的技术配置文件
<TechnicalProfile Id="LocalAccountSignUpWithReadOnlyEmail">
<DisplayName>Email signup</DisplayName>
<Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.SelfAssertedAttributeProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
<Metadata>
<Item Key="IpAddressClaimReferenceId">IpAddress</Item>
<Item Key="ContentDefinitionReferenceId">api.localaccountsignup</Item>
<Item Key="language.button_continue">Create</Item>
<!-- Sample: Remove sign-up email verification -->
<Item Key="EnforceEmailVerification">False</Item>
</Metadata>
<InputClaimsTransformations>
<InputClaimsTransformation ReferenceId="CopyEmailAddress" />
</InputClaimsTransformations>
<InputClaims>
<InputClaim ClaimTypeReferenceId="ReadOnlyEmail" />
<InputClaim ClaimTypeReferenceId="extension_DBId" DefaultValue="2" />
</InputClaims>
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="objectId" />
<OutputClaim ClaimTypeReferenceId="ReadOnlyEmail" Required="true" />
<OutputClaim ClaimTypeReferenceId="newPassword" Required="true" />
<OutputClaim ClaimTypeReferenceId="reenterPassword" Required="true" />
<OutputClaim ClaimTypeReferenceId="executed-SelfAsserted-Input" DefaultValue="true" />
<OutputClaim ClaimTypeReferenceId="authenticationSource" />
<OutputClaim ClaimTypeReferenceId="newUser" />
</OutputClaims>
<ValidationTechnicalProfiles>
<ValidationTechnicalProfile ReferenceId="AAD-UserWriteUsingLogonEmail-Custom" />
</ValidationTechnicalProfiles>
<UseTechnicalProfileForSessionManagement ReferenceId="SM-Noop" />
</TechnicalProfile>
Run Code Online (Sandbox Code Playgroud)
(请注意,这里我2
为我的自定义声明设置了默认值)
AAD-UserWriteUsingLogonEmail-Custom
是对内置(内部TrustFrameworkBase.xml
)AAD-UserWriteUsingLogonEmail
配置文件的修改,我对其进行了修改,将我的自定义声明extension_DBId
作为持久声明包含在内:
<PersistedClaim ClaimTypeReferenceId="extension_DBId" DefaultValue="3" />
Run Code Online (Sandbox Code Playgroud)
问题来了,
我生成了一个带有一些任意extension_DBId
(不是 1,2 或 3)的 JWT
但是当我用它运行策略时,在输出声明中,我得到extension_DBId
=2
这表明第三个编排步骤 ( LocalAccountSignUpWithReadOnlyEmail
) 没有收到extension_DBId
来自第一个编排步骤 ( IdTokenHint_ExtractClaims
) 的声明。
为什么IdTokenHint_ExtractClaims
配置文件不将声明转移extension_DBId
到LocalAccountSignUpWithReadOnlyEmail
配置文件?
我试图删除第二步(SelfAsserted-Unsolicited
),仍然没有奏效。
会是什么呢?
对于从输入 JWT 接收传入声明的用户旅程,您必须<InputClaim />
向依赖方添加一个<TechnicalProfile />
:
<RelyingParty>
<TechnicalProfile Id="PolicyProfile">
<InputClaims>
<InputClaim ClaimTypeReferenceId="email" />
<InputClaim ClaimTypeReferenceId="extension_DBId" />
</InputClaims>
</TechnicalProfile>
</RelyingParty>
Run Code Online (Sandbox Code Playgroud)
如果内部声明(例如extension_DBId
)的声明类型与输入 JWT(例如DBId
)的声明类型不同,那么您可以将PartnerClaimType属性添加到InputClaim元素:
<InputClaim ClaimTypeReferenceId="extension_DBId" PartnerClaimType="DBId" />
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
570 次 |
最近记录: |