2

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 有没有办法读取具有相同名称的多个属性,而不仅仅是最后一个?

4

1 回答 1

0

我通过在 AD FS 和 Azure AD B2C 之间添加自定义 SAML 2.0 代理解决了这个问题。SAML 2.0 代理是 AD FS 上的依赖方 (RP) 和 Azure AD B2C 的身份提供者 (IdP)。通过这种方式,可以转换声明并使用 Azure AD B2C 支持的声明构造器发出一个新的 SAML 2.0 令牌。

SAML 2.0 代理的 RP 和 IdP 部分都可以使用ITfoxtec.Identity.Saml2包实现。

于 2018-11-20T17:01:44.500 回答