【发布时间】:2021-05-11 00:20:29
【问题描述】:
我正在使用 Azure AD B2C 作为自定义站点的身份提供程序,该站点还为 Blackboard Learn LMS 站点提供 SSO。 Blackboard 可以通过 SAML 进行 SSO,因此我在 B2C 中使用这些功能。不幸的是,SAML 不是我熟悉的协议,因此我的故障排除能力有限。我正在学习以下教程:
一切进展顺利,但我正在尝试映射与 Blackboard 共享的用户属性,以便在创建新用户时,他们至少有一个基本配置文件。本教程中自然会出现一些属性,但我正在尝试为配置文件指定用户名(规范要求它是电子邮件地址),但我没有任何运气。
我在 SignUpOrSignIn 策略中添加了名为“userPrincipalName”的OutputClaim(请参见下面的代码),因为它具有来自 B2C 的适当值,但根据 Blackboard 测试页面,它不在正在生成的值中在 SAML 响应中发送(请参阅下面的屏幕截图)。
...
<RelyingParty>
<DefaultUserJourney ReferenceId="SignUpOrSignIn" />
<TechnicalProfile Id="PolicyProfile">
<DisplayName>PolicyProfile</DisplayName>
<Protocol Name="SAML2"/>
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="displayName" />
<OutputClaim ClaimTypeReferenceId="givenName" />
<OutputClaim ClaimTypeReferenceId="surname" />
<OutputClaim ClaimTypeReferenceId="userPrincipalName" />
<OutputClaim ClaimTypeReferenceId="email" DefaultValue="" />
<OutputClaim ClaimTypeReferenceId="identityProvider" DefaultValue="" />
<OutputClaim ClaimTypeReferenceId="objectId" PartnerClaimType="objectId"/>
</OutputClaims>
<SubjectNamingInfo ClaimType="objectId" ExcludeAsClaim="true"/>
</TechnicalProfile>
</RelyingParty>
...
是否需要采取进一步措施?我也在这里和那里修改了 TrustFrameworkExtensions(和 Base),但无济于事,而且我找不到任何描述的用于向 SAML 响应添加新属性的过程。有没有人有可以指导我完成的示例/教程?
(我查看了this question,答案表明我可能需要更改 NameIdFormat。我可以看到我的 B2C 应用程序元数据中的格式不正确,但我不确定我会怎么做关于改变它)
更新
根据@JasSuri-MSFT 的建议,我为 UPN 设置了一个(非空)默认值,果然,该默认值通过了。因此,问题似乎在于 UPN 为空。
这很奇怪,因为在 B2C 中用户的编辑页面中,显然有一个 UPN 值。它还突出了我没有提到的另一个奇怪之处。但是该政策中还列出了其他OutputClaims,它们也未包含在内。其中一个,email,我明确提供了一个值,它显然也显示为 null。
很明显,管道中有另一块我没有建立。
【问题讨论】:
-
您在正确的位置进行更改,但如果 userPrincipalName 为空,您将不会在 SAML 响应中看到它。尝试向它添加一个 defaultValue。 B2C 用户的 UPN 通常也是无用的 (randomguid@yourtenant.com)。
-
@JasSuri-MSFT,谢谢。正如你所建议的,我尝试了一个 defaultValue,它确实通过了。因此,对于 SAML 响应,UPN 似乎为空。但是,在设置此用户时,我明确设置了该用户和电子邮件的值,因此 B2C 确实 具有它们的值。是否还需要通过 SAML 协议推送这些值?
-
您需要在旅程中的某个时刻实际读取值。作为用户旅程的一部分执行的技术配置文件之一需要将声明 (UPN) 设置为输出声明。 UPN 通常来自没有协议的技术配置文件,表示来自目录的读/写操作。您通常不会为 B2C 用户设置 UPN 的值,它是为您生成的。电子邮件通常存储在身份集合中,在自定义策略中称为 signInNames.emailAddress。查看 AAD-UserReadUsingObjectId 技术简介。
-
Azure 门户始终将 UPN 显示为 B2C 用户身份集合中的登录名称之一。它实际上不是 UPN 属性,因此是我的第一条评论。
-
您需要使用图形 api 检查用户并在自定义策略中使用正确的原始属性名称。
标签: azure-ad-b2c saml