AD FS 通过自定义策略配置为使用 SAML 2.0 在 Azure AD B2C 上的声明提供程序。Azure AD B2C 上的依赖方正在使用 OpenID Connect。
AD FS 发出一个 SAML 2.0 断言,包括角色声明。如果角色在两个单独的 Attribute 元素中返回:
<saml:Attribute Name="http://test.com/claims/role">
<saml:AttributeValue>role1</saml:AttributeValue>
</saml:Attribute>
<saml:Attribute Name="http://test.com/claims/role">
<saml:AttributeValue>role2</saml:AttributeValue>
</saml:Attribute>
Azure AD B2C 仅读取最后一个声明。
否则,如果角色作为一个 Attribute 元素中的 AttributeValue 元素返回:
<saml:Attribute Name="http://test.com/claims/roles">
<saml:AttributeValue>role1</saml:AttributeValue>
<saml:AttributeValue>role2</saml:AttributeValue>
</saml:Attribute>
读取所有角色值。
使用的 Azure AD B2C 角色 ClaimType 是:
<ClaimType Id="role">
<DisplayName>Role</DisplayName>
<DataType>string</DataType>
<DefaultPartnerClaimTypes>
<Protocol Name="OAuth2" PartnerClaimType="role" />
<Protocol Name="OpenIdConnect" PartnerClaimType="role" />
<Protocol Name="SAML2" PartnerClaimType="http://test.com/claims/role" />
</DefaultPartnerClaimTypes>
<UserHelpText/>
</ClaimType>
<ClaimType Id="roles">
<DisplayName>Roles</DisplayName>
<DataType>stringCollection</DataType>
<DefaultPartnerClaimTypes>
<Protocol Name="OAuth2" PartnerClaimType="roles" />
<Protocol Name="OpenIdConnect" PartnerClaimType="roles" />
<Protocol Name="SAML2" PartnerClaimType="http://test.com/claims/roles" />
</DefaultPartnerClaimTypes>
<UserHelpText/>
</ClaimType>
SAML 2.0 支持发送多个具有相同名称的属性和一个具有 AttributeValue 列表的属性。Azure AD B2C 有没有办法读取具有相同名称的多个属性,而不仅仅是最后一个?