gpt4 book ai didi

azure-ad-b2c - 如何将 NameID 元素读取为 SAML2 身份提供者的 B2C TechnicalProfile 中的声明?

转载 作者:行者123 更新时间:2023-12-01 08:46:16 25 4
gpt4 key购买 nike

我按照 Set up sign-in with a Salesforce SAML provider by using custom policies in Azure Active Directory B2C 中的示例进行操作并且能够成功地从 Salesforce 单点登录到 Azure B2C。但是,我还想检索来自 SAML 断言的 NameID 元素作为声明。这可能吗?

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

<saml:Assertion>
<saml:Issuer>https://mytestinstance-dev-ed.my.salesforce.com</saml:Issuer>
<saml:Subject>
<saml:NameID>emp99999</saml:NameID>
</saml:Subject>
<saml:AuthnStatement AuthnInstant="2018-10-04T16:56:44.192Z">
<saml:AuthnContext>
<saml:AuthnContextClassRef>urn:oasis:names:tc:SAML:2.0:ac:classes:unspecified</saml:AuthnContextClassRef>
</saml:AuthnContext>
</saml:AuthnStatement>
<saml:AttributeStatement>
<saml:Attribute Name="userId">
<saml:AttributeValue>009f90000099zzz</saml:AttributeValue>
</saml:Attribute>
<saml:Attribute Name="username">
<saml:AttributeValue>user000@example.com</saml:AttributeValue>
</saml:Attribute>
<saml:Attribute Name="email">
<saml:AttributeValue>user000@example.com</saml:AttributeValue>
</saml:Attribute>
<saml:Attribute Name="">
<saml:AttributeValue>false</saml:AttributeValue>
</saml:Attribute>
</saml:AttributeStatement>
</saml:Assertion>

TechnicalProfile 允许您通过引用 AttributeStatement 作为声明来访问任何属性OutputClaim 元素中 PartnerClaimType 中的名称。例如,对于下面的 TechnicalProfile,socialIdpUserId 声明为设置为来自 SAML 断言的 userId 属性的值,“009f90000099zzz”。我想要的是是一个名为employeeId 的声明,它设置为“emp99999”,即NameID 元素的值。

<TechnicalProfile Id="salesforce">
<DisplayName>Salesforce</DisplayName>
<Description>Login with your Salesforce account</Description>
<Protocol Name="SAML2"/>
<Metadata>
<Item Key="RequestsSigned">false</Item>
<Item Key="WantsEncryptedAssertions">false</Item>
<Item Key="WantsSignedAssertions">false</Item>
<Item Key="PartnerEntity">https://mytestinstance-dev-ed.my.salesforce.com/.well-known/samlidp/TestB2C.xml</Item>
</Metadata>
<!-- <CryptographicKeys> -->
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="socialIdpUserId" PartnerClaimType="userId"/>
<OutputClaim ClaimTypeReferenceId="email" PartnerClaimType="email"/>
<OutputClaim ClaimTypeReferenceId="displayName" PartnerClaimType="username"/>
<OutputClaim ClaimTypeReferenceId="authenticationSource" DefaultValue="socialIdpAuthentication"/>
<OutputClaim ClaimTypeReferenceId="identityProvider" DefaultValue="SAMLIdp" />
<!-- We want the Subject/NameID value as a custom employeeId claim. URI reference doesn't work. -->
<OutputClaim ClaimTypeReferenceId="employeeId"
PartnerClaimType="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier" />
</OutputClaims>
<!--<OutputClaimsTransformations> -->
<UseTechnicalProfileForSessionManagement ReferenceId="SM-Noop"/>
</TechnicalProfile>

我尝试使用 PartnerClaimType 值,例如“NameID”、“NameIdentifier”,以及 NameIdentifier 的知名 URI这些似乎都不起作用。

我还看到了一些关于使用 SubjectNamingInfo 元素的引用并进行了实验,但这似乎只与定义发送到 RelyingParty 的 token 相关。而不是从 IDP 收到的 token 中读取声明。

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

最佳答案

使用 assertionSubjectName 的解决方案绝对是正确的。事实上,MSFT 在 2018 年 12 月 20 日更新了他们的主要文档页面以添加更多信息:Define a SAML Technical Profile .话虽如此 - 我想再添加一个注释,以帮助遇到这种行为的其他人。如果 NameID 元素具有“NameQualifier”属性,Azure 似乎不会将 NameID 映射到您的输出声明。

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

 <Subject>
<NameID>foo@bar.com</NameID>

这不会映射到您的输出声明:

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

希望这对遇到“assertionSubjectName”似乎不起作用的情况的任何人都有帮助。话虽如此 - 似乎这种行为并不是那么理想,我已经联系了 MSFT 以了解这是否是 WAD。

关于azure-ad-b2c - 如何将 NameID 元素读取为 SAML2 身份提供者的 B2C TechnicalProfile 中的声明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52670606/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com