Liberty Profile:无法使用LDAP / AD注册表在ID令牌中获得标准的openid连接声明

时间:2018-05-01 12:10:34

标签: openid-connect websphere-liberty oidc

我们已将WebSphere Liberty Profile v18.0.0.1的实例配置为openid connect provider
认证流程运作良好 问题是我们没有在ID Token中获得“标准”OIDC声明:namefamily_namegiven_namemiddle_name,{{1 }} ...
身份验证请求要求birthdate范围
我们在"openid email profile phone"中捆绑的声明包括:ID Tokensubat_hashrealmNameuniqueSecurityNamegroupsIdsissaudexpiat

问:

  • 如何获取ID令牌中的其他声明?它们不应该由WLP自动映射吗?
  • 我认为这是非常标准的映射AD属性以使用AD作为自由中的openid连接服务器的注册表。我们是否必须使用如here所述的nonce"scopeToClaimMap"之类的节?若有,那么将所有"attributeConfiguration"标准属性映射到AD属性的示例是什么?
  • ID Token配置中是否有遗漏或错误? 感谢

摘自server.xml

server.xml

2 个答案:

答案 0 :(得分:3)

  1. 请求的范围会影响调用userinfo API时返回的内容。
  2. Liberty OIDC id_token默认只发出所需的声明,但可以配置为显式获取其他LDAP属性作为id_token的声明。例如,如果要在id_token中包含family_namegiven_name,则openidConnectProvider配置如下所示:

    <openidConnectProvider id="OP" oauthProviderRef="Oauth" ...
       customClaims="family_name, given_name">
    
    </openidConnectProvider>
    
  3. 对注册表映射的声明以及在LDAP中使用自定义属性与userinfo类似,请参阅https://www.ibm.com/support/knowledgecenter/SSAW57_8.5.5/com.ibm.websphere.wlp.nd.doc/ae/twlp_config_scopes_claims_userinfo.html

    以下是一些提示: 自定义声明名称可以与LDAP属性名称不同,您可以定义映射规则 例如,如果family_name的LDAP属性为familyName,则您的配置将如下所示:

    <openidConnectProvider id="OP" oauthProviderRef="Oauth"  
    

    customClaimsEnabled =&#34;真&#34; customClaims =&#34; family_name,given_name&#34;&gt;

    &LT; claimToUserRegistryMap family_name =&#34; familyName&#34; /&gt;

    &LT; claimToUserRegistryMap given_name =&#34; givenName&#34; /&gt;

    &LT; / openidConnectProvider&GT;

    最后,Liberty LDAP用户注册表只能搜索预定义属性的列表。如果所有必需属性都在预定义列表中,则可以跳过此额外步骤。如果要使用未定义为Liberty联合注册表属性的LDAP属性,则需要执行其他LDAP设置 例如,假设您要在OIDC中使用LDAP属性loginCount,但loginCount不是Liberty LDAP注册表定义的属性,则需要配置"attributeConfiguration",如下所示

    <ldapRegistry ......
       <attributeConfiguration>
          <attribute name="loginCount" propertyName="seeAlso" entityType="PersonAccount"/> 
       </attributeConfiguration>
       ...
    </ldapRegistry>
    

    对于person对象,这是预定义的联合存储库属性列表 -

    "uid", 
    "cn", 
    "sn", 
    "preferredLanguage", 
    "displayName", 
    "initials", 
    "mail", 
    "ibmPrimaryEmail", 
    "jpegPhoto", 
    "labeledURI", 
    "carLicense", 
    "telephoneNumber", 
    "facsimileTelephoneNumber", 
    "pager", 
    "mobile", 
    "homePostalAddress", 
    "postalAddress", 
    "roomNumber", 
    "l", 
    "localityName", 
    "st", 
    "stateOrProvinceName", 
    "street", 
    "postalCode", 
    "city", 
    "employeeType", 
    "employeeNumber", 
    "manager", 
    "secretary", 
    "departmentNumber", 
    "title", 
    "ibmJobTitle", 
    "c", 
    "countryName", 
    "givenName", 
    "homeAddress", 
    "businessAddress", 
    "description", 
    "businessCategory", 
    "seeAlso", 
    "kerberosId", 
    "photoURL", 
    "photoURLThumbnail" . 
    

    有关详细信息,请参阅https://www.ibm.com/support/knowledgecenter/en/SSAW57_8.5.5/com.ibm.websphere.wim.doc/wimdomain.xsdfile.html

    如果您使用这些属性,则可以跳过其他LDAP设置。

答案 1 :(得分:0)

从LDAP / AD注册表获取标准声明的解决方案是将其添加到server.xml"customClaims""openidConnectProvider"内的标记,而不是作为状态的属性其他答案,声明名称用空格分隔,而不是逗号。

<openidConnectProvider id="OP" oauthProviderRef="Oauth" ...
   <customClaims>family_name given_name ...</customClaims>
</openidConnectProvider>