Я следовал примеру в Настройка входа с провайдером Salesforce SAML с помощью настраиваемых политик в Azure Active Directory B2C и смогла успешно выполнить единый вход из Salesforce в Azure B2C.Однако я также хотел бы получить значение элемента NameID из утверждения SAML в качестве утверждения.Возможно ли это?
Например, предположим, что входящее подтверждение SAML 2.0, опубликованное на конечной точке потребителя подтверждения B2C, выглядит примерно так: упрощенный 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 как заявка путем ссылки на его Имя в PartnerClaimType в элементе OutputClaim.Например, для указанного ниже Технического профиля заявка socialIdpUserId установлена в значение атрибута userId из утверждения SAML "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»,а также хорошо известный URI для NameIdentifier и ни один из них, похоже, не работал.
Я также видел некоторые ссылки на использование элемента SubjectNamingInfo и экспериментировал с ним, но это имеет значение только при определении токена, отправляемого RelyingParty , а не при чтении утверждений из токенаПолучено от IDP.
А как насчет других элементов Assertion?Например, в зависимости от того, как его использует IDP, может возникнуть необходимость прочитать значение AuthnContextClassRef, чтобы принять решение о необходимости вызова MFA.