Есть ли способ изменить NameID в пользовательских политиках SAML?

#azure-active-directory #azure-ad-b2c #saml #saml-2.0

#azure-active-directory #azure-ad-b2c #saml #saml-2.0

Вопрос:

Я пытаюсь изменить NameID для электронной почты пользователя в пользовательских политиках, но не могу понять, как. Мы начали с руководства по SAML по Microsoft.

Электронная почта в TrustFrameworkBase.xml :

 <ClaimType Id="email">
    <DisplayName>Email Address</DisplayName>
    <DataType>string</DataType>
    <DefaultPartnerClaimTypes>
      <Protocol Name="OpenIdConnect" PartnerClaimType="email" />
      <Protocol Name="SAML2" PartnerClaimType="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/email" />
    </DefaultPartnerClaimTypes>
    <UserHelpText>Email address that can be used to contact you.</UserHelpText>
    <UserInputType>TextBox</UserInputType>
    <Restriction>
      <Pattern RegularExpression="^[a-zA-Z0-9.!#$%amp;amp;'^_`{}~-] @[a-zA-Z0-9-] (?:.[a-zA-Z0-9-] )*$" HelpText="Please enter a valid email address." />
    </Restriction>
  </ClaimType>
  

TrustFrameworkExtensions.xml (только технический профиль):

  <TechnicalProfile Id="AAD-UserReadUsingObjectId">
      <OutputClaims>
        <OutputClaim ClaimTypeReferenceId="email" PartnerClaimType="signInNames.emailAddress" />
        <OutputClaim ClaimTypeReferenceId="extension_company" />
        <OutputClaim ClaimTypeReferenceId="extension_altitude3Id" />
        <OutputClaim ClaimTypeReferenceId="extension_isAvivaBroker" />
        <OutputClaim ClaimTypeReferenceId="extension_avivaAvantageId" />
        <OutputClaim ClaimTypeReferenceId="extension_isApproved" />
        <OutputClaim ClaimTypeReferenceId="extension_phoneExtension" />
        <OutputClaim ClaimTypeReferenceId="mobile" />
        <OutputClaim ClaimTypeReferenceId="streetAddress" />
        <OutputClaim ClaimTypeReferenceId="city" />
        <OutputClaim ClaimTypeReferenceId="state" />
        <OutputClaim ClaimTypeReferenceId="country" />
        <OutputClaim ClaimTypeReferenceId="postalcode" />
      </OutputClaims>
    </TechnicalProfile>
  

Часть SignUpOrSigninSAML.xml :

 <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="displayName" />
    <OutputClaim ClaimTypeReferenceId="givenName" />
    <OutputClaim ClaimTypeReferenceId="surname" />
    <OutputClaim ClaimTypeReferenceId="email" DefaultValue=""/>
    <OutputClaim ClaimTypeReferenceId="identityProvider" DefaultValue="" />
    <OutputClaim ClaimTypeReferenceId="objectId" PartnerClaimType="objectId"/>
  </OutputClaims>
  <SubjectNamingInfo ClaimType="objectId" ExcludeAsClaim="true"/>
</TechnicalProfile>
  

В метаданных у меня есть это ( SignUpOrSigninSAML.xm l):

 <md:NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameid-format:persistent</md:NameIDFormat>
<md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress</md:NameIDFormat>
<md:NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameid-format:transient</md:NameIDFormat>
<md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified</md:NameIDFormat>
  

Ответ №1:

Если вы обновите свое RelyingParty определение до следующего, которое должно выводить email в NameId формате urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress :

 <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="email" PartnerClaimType="sub" />
    <OutputClaim ClaimTypeReferenceId="displayName" />
    <OutputClaim ClaimTypeReferenceId="givenName" />
    <OutputClaim ClaimTypeReferenceId="surname" />
    <OutputClaim ClaimTypeReferenceId="email" DefaultValue=""/>
    <OutputClaim ClaimTypeReferenceId="identityProvider" DefaultValue="" />
    <OutputClaim ClaimTypeReferenceId="objectId" PartnerClaimType="objectId"/>
  </OutputClaims>
  <SubjectNamingInfo ClaimType="sub" Format="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress" ExcludeAsClaim="true"/>
</TechnicalProfile>
  

Я оставил email in в качестве дополнительного атрибута, который будет включен в ваше утверждение, но если вы заинтересованы только в том, чтобы он был в NameId , тогда вы могли бы удалить <OutputClaim ClaimTypeReferenceId="email" DefaultValue=""/> строку.

Комментарии:

1. Работает просто великолепно! Очень хорошее решение. Нужно ли мне по-прежнему указывать протокол в TrustFrameworkBase.xml разделе Электронная почта для Saml2 или я могу удалить его? а как насчет <OutputClaim ClaimTypeReferenceId="email" PartnerClaimType="signInNames.emailAddress" /> в TrustFrameworkExtensions.xml ?

2. @AntoineBrisebois-Roy Protocol in TrustFrameworkBase будет применяться к атрибуту в утверждении, но не NameId поэтому вы можете удалить его, если вы также не хотите включать электронное письмо в качестве атрибута. Строку в TrustFrameworkExtensions вам нужно сохранить, если вы читаете электронное письмо из профиля пользователя в AAD. Эта строка сопоставляет адрес электронной почты из коллекции имен входа в AAD с вашим утверждением электронной почты в политике B2C, которое затем сопоставляется с вашим NameId при записи токена.

3. Я только вчера принял решение добавить format параметр в наши документы, он скоро должен появиться.