如何以身份提供者的身份从ADFS在B2C中输出组声明

时间:2018-09-13 11:12:59

标签: azure openid azure-ad-b2c

我正在通过OpenID Connect将ADFS用作Azure B2C的IDP。 登录有效,B2C从ADFS发送UPN作为JWT令牌中的socialIdpUserId声明。

但是来自ADFS的团体声明无效。 如何在JWT中接收团体索赔?

这是设置: ADFS声明规则:域安全性和upn enter image description here c:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname", Issuer == "AD AUTHORITY"] => issue(store = "Active Directory", types = ("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn", "http://schemas.xmlsoap.org/claims/Group"), query = ";userPrincipalName,tokenGroups(longDomainQualifiedName);{0}", param = c.Value);

客户端权限设置为openid和allatclaims enter image description here

ClaimsSchema中TrustFrameworkBase策略中的

新的声明类型定义:

<ClaimsSchema><ClaimType Id="group">
    <DisplayName>group</DisplayName>
    <DataType>string</DataType>
    <DefaultPartnerClaimTypes>
      <Protocol Name="OAuth2" PartnerClaimType="group" />
      <Protocol Name="OpenIdConnect" PartnerClaimType="group" />
      <Protocol Name="SAML2" PartnerClaimType="http://schemas.xmlsoap.org/claims/Group" />
    </DefaultPartnerClaimTypes>
  </ClaimType></ClaimsSchema>
在TrustFrameworkExtensions策略的TechnicalProfile中

输出声明定义:

<OutputTokenFormat>JWT</OutputTokenFormat><OutputClaims>
          <OutputClaim ClaimTypeReferenceId="socialIdpUserId" PartnerClaimType="UPN" />
          <OutputClaim ClaimTypeReferenceId="group" PartnerClaimType="group" />              
        </OutputClaims>
在SignUpOrSignIn策略文件的TechnicalProfile中

输出 group 声明定义

<TechnicalProfile Id="PolicyProfile">
  <DisplayName>PolicyProfile</DisplayName>
  <Protocol Name="OpenIdConnect" />
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="socialIdpUserId" />
    <OutputClaim ClaimTypeReferenceId="group" />
    <OutputClaim ClaimTypeReferenceId="authmethod" />
    <OutputClaim ClaimTypeReferenceId="objectId" PartnerClaimType="sub"/>
    <OutputClaim ClaimTypeReferenceId="identityProvider" />
  </OutputClaims>
  <SubjectNamingInfo ClaimType="sub" />
</TechnicalProfile>

但是JWT令牌没有附带 group 声明!为什么?

2 个答案:

答案 0 :(得分:0)

以下是从B2C发出团体索赔的方法: 1.在基本策略文件中为组定义新的索赔类型。该定义应该在元素的末尾(是的,写过stringCollection的人是写的!)

      <ClaimType Id="IdpUserGroups">
    <DisplayName>Security groups</DisplayName>
    <DataType>stringCollection</DataType>
    <DefaultPartnerClaimTypes>
      <Protocol Name="OAuth2" PartnerClaimType="groups" />
      <Protocol Name="OpenIdConnect" PartnerClaimType="groups" />
      <Protocol Name="SAML2" PartnerClaimType="http://schemas.xmlsoap.org/claims/Group" />
    </DefaultPartnerClaimTypes>
  </ClaimType>
  1. ADFS定义的扩展策略的中使用此新定义的声明

              <OutputClaims>                
            <OutputClaim ClaimTypeReferenceId="socialIdpUserId" PartnerClaimType="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn" />                
            <OutputClaim ClaimTypeReferenceId="IdpUserGroups" PartnerClaimType="http://schemas.xmlsoap.org/claims/Group" />
            <OutputClaim ClaimTypeReferenceId="authenticationSource" DefaultValue="SAML fmdadfs4.local"/>
            <OutputClaim ClaimTypeReferenceId="identityProvider" DefaultValue="SAML ADFS4 fmdadfs4.local" />
          </OutputClaims>
    
  2. 在登录策略文件中 elemnt下的依赖方定义的定义中使用相同的声明

      <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="socialIdpUserId" />
    <OutputClaim ClaimTypeReferenceId="IdpUserGroups" />     
    <OutputClaim ClaimTypeReferenceId="identityProvider" />
    <OutputClaim ClaimTypeReferenceId="userPrincipalName" PartnerClaimType="userPrincipalName" />
    

  3. 如下所示,
  4. 来自ADFS的问题组声明 enter image description here

答案 1 :(得分:0)

看起来OP只是将partnerclaimtype拼写错误。 不是某些,因为您可能已经映射了一些非标准的东西,但是我认为您只需要将PartnerClaimType从 group 更改为 group

    <ClaimType Id="groups">
      <DisplayName>Groups</DisplayName>
      <DataType>stringCollection</DataType>
      <DefaultPartnerClaimTypes>
        <Protocol Name="OpenIdConnect" PartnerClaimType="groups" />
      </DefaultPartnerClaimTypes>
      <UserHelpText>List of group memberships</UserHelpText>
    </ClaimType>
  • 一旦定义了 ClaimType ,就无需在其他任何地方指定 PartnerClaimType -除非您覆盖该值。
  • 我还将考虑使用DefaultValue =“”属性,以便您可以检查您的策略是否正确执行了输出声明。

OutputClaim ClaimTypeReferenceId="groups" DefaultValue="no groups assigned