Azure AD B2C OpenID Connect和SAML 2.0读取角色声明

时间:2017-10-18 15:07:02

标签: azure-ad-b2c itfoxtec-identity-saml2

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仅读取最后一个声明。

否则,如果角色作为AttributeValue元素返回到一个Attribute元素中:

<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支持发送具有相同名称的多个Attribute和一个具有AttributeValue列表的Attribute。 Azure AD B2C是否有一种方法可以读取具有相同名称的多个属性,而不仅仅是最后一个属性?

1 个答案:

答案 0 :(得分:0)

我通过在AD FS和Azure AD B2C之间添加自定义SAML 2.0代理解决了该问题。 SAML 2.0代理是AD FS上的依赖方(RP)和Azure AD B2C的身份提供程序(IdP)。这样,可以转换声明并使用Azure AD B2C支持的声明构造函数发布nye SAML 2.0令牌。

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