AD OIDC

时间:2018-03-21 17:30:46

标签: azure kubernetes azure-active-directory

代表客户发布此问题:

我们正在尝试将Kubernetes OIDC身份验证与Azure AD集成。 根据文档为了使用用户组,我们需要将以下选项传递给Kubernetes API服务: --oidc-groups-claim user_roles Api服务使用user_roles来查找用户在Azure AD返回的JWT中成员的组的组名。

但是,当我们解码Azure AD返回的JWT时,我们无法在返回的JWT中找到任何名为user_roles的字段。解码后的JWT看起来像这样(编辑):

{  
  "aud": "spn:XXX",  
  "iss": "https://sts.windows.net/XXX/ ",  
  "iat": XXX,  
  "nbf": XXX,  
  "exp": XXX,  
  "acr": "1",  
  "aio": "XXX",  
  "amr": [  
    "pwd",  
    "mfa"  
  ],  
  "appid": "XXX",  
  "appidacr": "0",  
  "family_name": "Foo",  
  "given_name": "Bar",  
  "groups": [  
    "gid1",  
    "gid2"  
  ],  
  "ipaddr": "XXX",  
  "name": "Foo Bar",  
  "oid": "XXX",  
  "onprem_sid": "XXX",  
  "scp": "user_impersonation",  
  "sub": "XXX",  
  "tid": "XXX",  
  "unique_name": "XXX",  
  "upn": "XXX",  
  "uti": "XXX",  
  "ver": "1.0"  
}   

如您所见,返回的JWT中没有user_role字段。有什么我们缺少的,即。我们是否应该在Azure AD中启用一些设置,这些设置将使Azure返回user_role填充用户所属的组名? 我们希望得到的JWT应该看起来像这样(请注意user_role字段):

https://github.com/kubernetes/kubernetes/issues/33290#issue-178672086

{  
  "iss": "XXX",  
  "aud": "XXX",  
  "exp": XXX,  
  "jti": "XXX",  
  "iat": XXX,  
  "nbf": XXX,  
  "sub": "mmosley",  
  "user_role": [  
    "admin",  
    "users",  
    "approvers"  
  ],  
  "email": "XXX"  
}   

非常感谢任何帮助或指示。

1 个答案:

答案 0 :(得分:1)

首先,正如我所知,AAD id_token仅支持role声明,而非user_role。可以通过添加AAD应用程序清单的id_token属性将其添加到appRoles中。 需要位于theconfig中以匹配Azure AAD检索到的令牌中的受众。

其次,--oidc-groups-claim不应使用user_role声明。根据我的理解,它应该groupsgroups中的id_token声明匹配。

此外,您可以参考this blogthis sample将Kubernetes RBAC与Azure AD集成。

this document.

中查看有关Kubernetes的RBAC身份验证的更多详细信息