【问题标题】:What is the purpose of the --oidc-client-id parameter when setting Kubernetes up to use OpenID Connect?将 Kubernetes 设置为使用 OpenID Connect 时,--oidc-client-id 参数的用途是什么?
【发布时间】:2017-12-16 02:21:44
【问题描述】:

Kubernetes documentation related to OpenID Connect 提到,作为设置的一部分,您需要向 API 服务器提供一些参数:

--oidc-client-id: A client id that all tokens must be issued for.

没有其他解释说明这将如何映射到,例如,something returned by the OpenID Connect-conformant Google identity provider

我不知道这个参数值将用于什么。它会与解码后的 JWT 令牌中的内容匹配吗?

Google 身份提供程序返回的id_token 看起来可能在其aud 字段中包含某些内容,一旦解码,它的aud 字段(aud 显然是“观众”的缩写)。这是--oidc-client-id 应该匹配的吗?我走远了吗?

【问题讨论】:

标签: kubernetes openid-connect google-openidconnect


【解决方案1】:

这可以从id tokens 上的 kubernetes 文档中得到解释。

如您所见,身份提供者是一个独立的系统。例如,这可以是 MS Azure AD 或 Google,如您所示。

当您注册身份提供者时,您会得到重要的回报。 client id 就是这样一个重要的参数。如果您知道 openid 连接流程,您需要在跟随流程时提供此 client id。如果流程完成,您将返回 id tokenid token 有一个必须拥有的声明,aud 是为其颁发令牌的受众。

当您验证 id token 时,您必须确认您在受众列表中。更多内容可以通过spec找到。

引用规范,

客户端必须验证 aud(受众)声明是否包含其 client_id 值,该值在由 iss(发布者)声明标识为受众的颁发者处注册

现在,kubernetes 使用不记名令牌。这里使用的令牌是 id tokens。要验证令牌,它应该专门了解受众。这使 API 服务器能够验证为进行调用的特定客户端颁发的令牌。从而授权成功的召唤。

【讨论】:

  • 感谢您的回答。我知道身份提供者是一个单独的系统。而且我知道这个符合 OpenID Connect 的系统将返回一个符合 specificationid_token。但它在Kubernetes documentation 的哪个位置告诉我aud 字段的值将与--oidc-client-id 参数的值匹配?
  • @LairdNelson 作为两个独立的系统,Kubernetes 需要验证它收到的 id 令牌。它会从通过“--oidc-issuer-url”设置的颁发者 url 配置中获得一些东西。例如,令牌签名证书的公钥(通过发现文档访问)。但它不知道您的应用程序的注册客户端 ID(aud 声明),除非您通过配置给它。的确,它不在文档中,但对于任何使用 id 令牌作为不记名令牌的服务,这是惯例
  • 感谢您的评论,尤其是您的第一个评论,您在其中为我完成了缺少的链接:从 Google 收到的 id_token 值的 aud 字段必须与 @987654337 的值匹配@ 参数在启动时提供给 apiserver。令人费解的是,这没有更清楚地说明。
  • @LairdNelson 嗯,那是因为这个验证来自 openid 连接规范。如果他们在文档中提到了此配置参数的用法,我相信任何人(特别是那些不熟悉规范的人)都会减少困惑。无论如何,我希望我的回答对你有所帮助
  • 完全同意,您的回答确实有帮助。谢谢。
猜你喜欢
  • 2018-02-08
  • 2018-07-25
  • 1970-01-01
  • 1970-01-01
  • 2020-10-14
  • 2016-06-28
  • 2018-04-18
  • 2019-11-15
  • 2016-09-02
相关资源
最近更新 更多