Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Azure ad b2c 如何在SAML SSO响应中添加用户属性_Azure Ad B2c_Saml - Fatal编程技术网

Azure ad b2c 如何在SAML SSO响应中添加用户属性

Azure ad b2c 如何在SAML SSO响应中添加用户属性,azure-ad-b2c,saml,Azure Ad B2c,Saml,我正在使用Azure AD B2C作为自定义站点的身份提供商,该站点还为黑板学习LMS站点提供SSO。Blackboard可以通过SAML实现SSO,所以我正在B2C中使用这些功能。不幸的是,SAML不是我熟悉的协议,所以我的故障排除能力有限。我正在以下位置完成本教程的学习: 一切都进行得很顺利,但我正在尝试映射与Blackboard共享的用户属性,以便在创建新用户时,它们至少有一个基本的配置文件。在本教程中,有几个属性是自然产生的,但我试图为概要文件指定用户名(规范要求它是电子邮件地址),我

我正在使用Azure AD B2C作为自定义站点的身份提供商,该站点还为黑板学习LMS站点提供SSO。Blackboard可以通过SAML实现SSO,所以我正在B2C中使用这些功能。不幸的是,SAML不是我熟悉的协议,所以我的故障排除能力有限。我正在以下位置完成本教程的学习:

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

我在SignUpOrSignIn策略中添加了名为“userPrincipalName”的
OutputClaim
(参见下面的代码),因为它具有来自B2C的适当值,但根据黑板测试页面,它不在SAML响应中发送的值中(参见下面的屏幕截图)

。。。
保单简介
...

是否需要采取进一步的措施?我在这里和那里对TrustFrameworkExtensions(和Base)进行了修补,但都没有用,而且我找不到任何描述的向SAML响应添加新属性的过程。有没有人能给我提供一个例子/教程

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

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

这很奇怪,因为在B2C用户的编辑页面中,显然有一个UPN值。它还突出了我没有提到的另一个奇怪之处。但该保单中列出的其他
输出索赔也不包括在内。其中一个,
email
,我显式地为提供了一个值,它显然也显示为null


显然,管道中还有另一块我还没有确定的地方。

AAD UserReadUsingObjectId
中添加
signInNames.emailAddress
作为输出声明,并在
RelyingParty
部分添加
signInNames.emailAddress
作为输出声明。在相关方的输出声明中使用
partnerClaimType
,以在SAML响应中使用您喜欢的名称发布声明



您在正确的位置进行了更改,但是如果userPrincipalName为null,您将无法在SAML响应中看到它。尝试向其添加默认值。此外,B2C用户的UPN通常是无用的(randomguid@yourtenant.com)@JasSuri MSFT,谢谢。正如您所建议的,我尝试了一个defaultValue,但它成功了。因此,UPN对于SAML响应似乎为空。然而,当设置这个用户时,我显式地为那个用户和电子邮件设置了值,所以B2C确实为他们设置了值。通过SAML协议推送这些值还需要其他什么吗?您需要在过程中的某个点实际读取这些值。作为用户旅程的一部分执行的技术配置文件之一需要将声明(UPN)设置为输出声明。UPN通常来自没有协议的技术概要文件,表示从目录进行读/写操作。您从未为B2C用户设置UPN值,通常是为您生成的。电子邮件通常存储在标识集合中,在自定义策略中称为signInNames.emailAddress。查看AAD UserReadUsingObjectId技术配置文件。Azure门户始终将UPN显示为B2C用户身份集合中的一个登录名。这实际上不是UPN属性,因此我的第一条评论。您需要使用graph api检查用户,并在自定义策略中使用正确的原始属性名称。谢谢!我希望今天晚些时候或者明天能回到这个话题上来。我会根据我的发现进行更新。谢谢
  ...
  <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>
  ...