首页 > 解决方案 > 如何在 SAML SSO 响应中添加用户属性

问题描述

我正在使用 Azure AD B2C 作为自定义站点的身份提供程序,该站点还为 Blackboard Learn LMS 站点提供 SSO。Blackboard 可以通过 SAML 进行 SSO,因此我在 B2C 中使用这些功能。不幸的是,SAML 不是我熟悉的协议,因此我的故障排除能力有限。我正在学习以下教程:

https://docs.microsoft.com/en-us/azure/active-directory-b2c/saml-service-provider?tabs=windows&pivots=b2c-custom-policy

一切进展顺利,但我正在尝试映射与 Blackboard 共享的用户属性,以便在创建新用户时,他们至少有一个基本配置文件。本教程中自然会出现一些属性,但我正在尝试为配置文件指定用户名(规范要求它是电子邮件地址),但我没有任何运气。

OutputClaim在 SignUpOrSignIn 策略中添加了命名的“userPrincipalName”(参见下面的代码),因为它具有来自 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 响应添加新属性的过程。有没有人有一个例子/教程可以引导我完成它?

(我查看了这个问题,答案表明我可能需要更改 NameIdFormat。我可以看到我的 B2C 应用程序元数据中的格式不正确,但我不确定如何更改它)

更新

根据@JasSuri-MSFT 的建议,我为 UPN 设置了一个(非空)默认值,果然,该默认值通过了。因此,问题似乎在于 UPN 为空。

这很奇怪,因为在 B2C 中用户的编辑页面中,显然有一个 UPN 值。它还突出了我没有提到的另一个奇怪之处。但是OutputClaims该政策中还列出了其他未包括在内的内容。其中之一email,我明确提供了一个值,并且它显然也显示为 null。

很明显,管道中还有一个我没有建立的地方。

标签: azure-ad-b2csaml

解决方案



推荐阅读