我正在尝试使用 Azure B2C 的身份框架体验将 IdP 发起的 SAML SSO 实施到服务提供商中。服务提供者要求身份提供者的元数据将NameIDFormat
元素IDPSSODescriptor
设置为urn:oasis:names:tc:SAML:2.0:nameid-format:transient
。
我遇到的问题是 IEF 似乎不支持配置NameIDFormat
. 似乎 IEF 产生的元数据只支持persistent
我正在使用的政策如下所示。它直接仿照微软关于在 IEF 中实施 SAML SSO 策略的文档。
我试图通过设置此处记录NameIDFormat
的 IEFNameIdPolicyFormat
参数来配置,但没有成功。
我还尝试设置SubjectNamingInfo
一个“瞬态-y”声明(即随机生成的、短暂的)。我创建了一个生成随机 GUID 声明的声明转换器,并希望 IEF 会注意到它是随机生成的并进行NameIdFormat
相应设置。
关于如何将 IDP 的元数据设置为的任何NameIdFormat
建议urn:oasis:names:tc:SAML:2.0:nameid-format:transient
?
IEF SSO 政策
<TrustFrameworkPolicy xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.microsoft.com/online/cpim/schemas/2013/06" PolicySchemaVersion="0.3.0.0" TenantId="acmecorp.onmicrosoft.com" PolicyId="B2C_1A_signup_signin_saml" PublicPolicyUri="http://acmecorp.onmicrosoft.com/B2C_1A_signup_signin_saml" DeploymentMode="Development" UserJourneyRecorderEndpoint="urn:journeyrecorder:applicationinsights" TenantObjectId="...">
<BasePolicy>
<TenantId>acmecorp.onmicrosoft.com</TenantId>
<PolicyId>B2C_1A_TrustFrameworkExtensions</PolicyId>
</BasePolicy>
<UserJourneys>
<UserJourney Id="SignUpOrSignIn">
<OrchestrationSteps>
<OrchestrationStep Order="7" Type="SendClaims" CpimIssuerTechnicalProfileReferenceId="Saml2AssertionIssuerEncrypted" />
</OrchestrationSteps>
</UserJourney>
</UserJourneys>
<RelyingParty>
<DefaultUserJourney ReferenceId="SignUpOrSignIn" />
<UserJourneyBehaviors>
<SingleSignOn Scope="Application" />
<SessionExpiryType>Absolute</SessionExpiryType>
<SessionExpiryInSeconds>86400</SessionExpiryInSeconds>
</UserJourneyBehaviors>
<TechnicalProfile Id="PolicyProfile">
<DisplayName>PolicyProfile</DisplayName>
<Protocol Name="SAML2" />
<Metadata>
<Item Key="IdpInitiatedProfileEnabled">true</Item>
<Item Key="NameIdPolicyFormat">urn:oasis:names:tc:SAML:2.0:nameid-format:transient</Item>
<Item Key="WantsEncryptedAssertions">true</Item>
<Item Key="PartnerEntity"><![CDATA[
<md:EntityDescriptor xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata" entityID="https://the-sp.com" ID="...">
<md:SPSSODescriptor ID="..." protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol" AuthnRequestsSigned="true" WantAssertionsSigned="true">
<md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:transient</md:NameIDFormat>
<md:AssertionConsumerService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://the-sp.com/sso-endpoint" index="1" isDefault="true"/>
</md:SPSSODescriptor>
</md:EntityDescriptor>
]]></Item>
</Metadata>
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="signInNames.emailAddress" PartnerClaimType="UID" DefaultValue="never@never.com" />
</OutputClaims>
<SubjectNamingInfo ClaimType="UID" />
</TechnicalProfile>
</RelyingParty>
</TrustFrameworkPolicy>