我目前正在研究通过自定义电子邮件服务提供商从Azure AD B2C中的自定义策略发送电子邮件的可能性。为此,我遵循Microsoft文档https://docs.microsoft.com/en-us/azure/active-directory-b2c/custom-email-sendgrid中的本教程。
由于我们已经使用自定义策略已有相当一段时间了,所以我尝试立即将本教程采纳为我们自己的自定义策略:我们使用多步骤注册过程,其中电子邮件验证步骤为第一步,个人数据步骤为第二步。
我成功地连接了电子邮件服务提供商,并通过它发送代码,并在成功验证电子邮件地址之后继续进行注册过程的第二步。
但是,当我想完成注册的第二步并在AD中实际创建用户时,我会在前端看到以下错误:
无法验证所提供的信息。
为了获得更多的见解,我在策略中激活了开发人员模式,并在Application Insights中检查了以下错误的踪迹:
在租户ID为“ B2C_1A_signup_notificationtest”的索赔主体的索赔集合中找不到指定为标识符索赔类型的索赔类型“ signInNames.emailAddress”。
在技术资料AAD-UserWriteUsingLogonEmail
中引起。但是,如您在下面的技术资料中所见,上述声明类型signInNames.emailAddress
是通过技术资料的输入声明中的partnerClaimType指令派生的:
<TechnicalProfile Id="AAD-UserWriteUsingLogonEmail">
<Metadata>
<Item Key="Operation">Write</Item>
<Item Key="RaiseErrorIfClaimsPrincipalAlreadyExists">true</Item>
</Metadata>
<IncludeInSso>false</IncludeInSso>
<InputClaims>
<!-- THIS IS THE LINE I AM REFERRING TO: -->
<InputClaim ClaimTypeReferenceId="email" PartnerClaimType="signInNames.emailAddress"
Required="true"/>
</InputClaims>
<PersistedClaims>
<!-- Required claims -->
<PersistedClaim ClaimTypeReferenceId="email" PartnerClaimType="signInNames.emailAddress"/>
<PersistedClaim ClaimTypeReferenceId="newPassword" PartnerClaimType="password"/>
<PersistedClaim ClaimTypeReferenceId="displayName" DefaultValue="unknown"/>
<PersistedClaim ClaimTypeReferenceId="passwordPolicies"
DefaultValue="DisablePasswordExpiration"/>
<!-- Optional claims. -->
<PersistedClaim ClaimTypeReferenceId="extension_Salutation"/>
<PersistedClaim ClaimTypeReferenceId="givenName"/>
<PersistedClaim ClaimTypeReferenceId="surname"/>
<PersistedClaim ClaimTypeReferenceId="country"/>
<PersistedClaim ClaimTypeReferenceId="extension_Company"/>
<PersistedClaim ClaimTypeReferenceId="extension_Kundennummer"/>
</PersistedClaims>
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="objectId"/>
<OutputClaim ClaimTypeReferenceId="newUser" PartnerClaimType="newClaimsPrincipalCreated"/>
<OutputClaim ClaimTypeReferenceId="authenticationSource"
DefaultValue="localAccountAuthentication"/>
<OutputClaim ClaimTypeReferenceId="userPrincipalName"/>
<OutputClaim ClaimTypeReferenceId="signInNames.emailAddress"/>
</OutputClaims>
<IncludeTechnicalProfile ReferenceId="AAD-Common"/>
<UseTechnicalProfileForSessionManagement ReferenceId="SM-AAD"/>
</TechnicalProfile>
所以我的问题是:我在哪里可以寻求进一步的调试?我在寻找正确的位置还是错误消息表示完全不同的内容?
另外请注意:由于身份体验框架配置的性质,因此涉及很多xml。因此,我在这里发布了依赖方策略文件,其中也包括要点,其中包括服务连接的相关部分:https://gist.github.com/mmaedler/0a555fc3f9e6036e235a15419e7afdd5
更新另外,我已经将所有相关(希望)技术配置文件以及UserJourney本身添加到了这个新要点:https://gist.github.com/mmaedler/19ab309897f3a7d993816eb34adc7edb
我还根据您的建议进行了进一步调查。由于我覆盖了技术资料LocalAccountSignUpMultiStep-1
,以使用我们的邮寄后端替换当前的内置代码验证,因此表明此输出结果缺少以下技术资料所期望的字段/格式的电子邮件地址在步骤2中,我向LocalAccountSignUpMultiStep-2
添加了一个新的OutputClaim,并带有ClaimTypeReferenceId="email"
,这导致在注册步骤2中出现新的输入。在此输入电子邮件地址成功完成了注册和令牌的创建。 / p>
答案 0 :(得分:0)
误解,此XML代码段输入声明转换为-“请通过所有用户的email
属性搜索signInNames.emailAddress
来找到我这个用户”。
日志中的错误指出,执行此查找操作时,signInNames.emailAddress
的值为空。这意味着声明email
从未在业务流程步骤调用的任何先前技术档案中作为输出声明输出。
回顾一下在此之前调用的所有技术资料,并确定其中包含用户电子邮件的声明。确保声明是由业务流程步骤调用的技术档案输出的。