Azure ad b2c 如何将NameID元素理解为SAML2身份提供者的B2C技术文件中的声明?

Azure ad b2c 如何将NameID元素理解为SAML2身份提供者的B2C技术文件中的声明?,azure-ad-b2c,Azure Ad B2c,我在书中仿效了这个例子 并且能够成功地将SSO从Salesforce导入Azure B2C。但是,我还想检索 SAML断言中的NameID元素作为声明。这可能吗 例如,假设发布到B2C断言消费者端点的传入SAML2.0断言看起来 类似于这种简化的XML https://mytestinstance-dev-ed.my.salesforce.com emp99999 urn:oasis:name:tc:SAML:2.0:ac:classes:未指定 009F9000099ZZZ user000@

我在书中仿效了这个例子 并且能够成功地将SSO从Salesforce导入Azure B2C。但是,我还想检索 SAML断言中的NameID元素作为声明。这可能吗

例如,假设发布到B2C断言消费者端点的传入SAML2.0断言看起来 类似于这种简化的XML


https://mytestinstance-dev-ed.my.salesforce.com
emp99999
urn:oasis:name:tc:SAML:2.0:ac:classes:未指定
009F9000099ZZZ
user000@example.com
user000@example.com
假的
TechnicalProfile允许您通过引用其属性来访问AttributeStatement中作为声明的任何属性 OutputClaim元素中PartnerClaimType中的名称。例如,对于下面的TechnicalProfile,SocialidUserID声明是 设置为SAML断言“009F9000099ZZZ”中userId属性的值。我想要的是 是一个名为employeeId的声明,该声明设置为NameID元素的值“emp99999”


销售人员
使用您的Salesforce帐户登录
假的
假的
假的
https://mytestinstance-dev-ed.my.salesforce.com/.well-known/samlidp/TestB2C.xml
我尝试使用PartnerClaimType值,如“NameID”、“NameIdentifier”,以及 这些似乎都不起作用

我还看到了一些关于SubjectNamingInfo元素使用的参考资料,并对其进行了实验, 但这似乎只与定义发送到服务器的令牌相关 并且不用于从从IDP接收的令牌读取声明

还有,其他断言元素呢?例如,根据IDP的使用方式, 我可以看到需要读取AuthnContextClassRef值来决定是否
要发出MFA质询。

对于SAML2协议,可以使用值为
PartnerClaimType
访问NameID元素的值。 本节“为SAML 2.0索赔提供程序指定技术概要”一节中提到了这一点 在先进的政策吉特回购

例如,要将NameID从SAML断言映射到“employeeId”声明,请将其
PartnerClaimType
设置为“assertionSubjectName” 在
OutputClaim
claim元素中


另一个例子可以在

编辑

根据Adam C的回答,现在在
. 他还指出,如果NameID元素具有“NameQualifier”属性,B2C将不会将NameID映射到输出声明。

使用断言SubjectName的解决方案绝对正确。事实上,MSFT于2018年12月20日更新了其主要文档页面,以添加更多信息:。话虽如此,我想再补充一点,以帮助其他遇到这种行为的人。如果NameID元素具有“NameQualifier”属性,Azure似乎不会将NameID映射到输出声明

示例-这将映射到您的输出声明:

 <Subject>
            <NameID>foo@bar.com</NameID>
<Subject>
    <NameID NameQualifier="https://bar.com/realms/foo">foo@bar.com</NameID>

foo@bar.com
这不会映射到您的输出声明:

 <Subject>
            <NameID>foo@bar.com</NameID>
<Subject>
    <NameID NameQualifier="https://bar.com/realms/foo">foo@bar.com</NameID>

foo@bar.com

希望这将有助于任何遇到“断言SubjectName”似乎不起作用的情况的人。话虽如此,但似乎这种行为并不理想,我已联系MSFT,以确定这是否为WAD。

在我的例子中,我试图从SAML响应中提取NameID,其中NameID元素具有
SPNameQualifier
属性。使用断言SubjectName不起作用

但是,使用的是
SPNameQualifier
属性值

例如,假设SAML响应如下所示


emp99999
要提取NameID值,可以将声明映射设置为



Hi,正在使用
assertionSubjectName
为您工作吗?我不为meHi工作,正在使用
断言SubjectName
为您工作吗?这对美赞克人不起作用,亚当。很高兴看到它现在被记录在主文档中,了解NameQualifier问题也很有用。