#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
inTrustFrameworkBase
будет применяться к атрибуту в утверждении, но неNameId
поэтому вы можете удалить его, если вы также не хотите включать электронное письмо в качестве атрибута. Строку вTrustFrameworkExtensions
вам нужно сохранить, если вы читаете электронное письмо из профиля пользователя в AAD. Эта строка сопоставляет адрес электронной почты из коллекции имен входа в AAD с вашим утверждением электронной почты в политике B2C, которое затем сопоставляется с вашимNameId
при записи токена.3. Я только вчера принял решение добавить
format
параметр в наши документы, он скоро должен появиться.