如何在Kubernetes中让多个Azure应用通过oauth2_proxy完成身份认证
配置方案:OAuth2_Proxy校验Azure AD签发的跨应用AccessToken
要实现用第二个应用的AccessToken访问受oauth2_proxy保护的第一个应用的API,按以下步骤配置即可:
1. Azure AD侧前置配置
- 两个应用均需提前在目标Azure AD租户中注册为独立的应用注册项
- 为受保护的第一个应用暴露自定义API作用域,示例作用域值为
api://<第一个应用的客户端ID>/access_as_user - 在第二个应用的「API权限」配置页,添加上述第一个应用暴露的自定义作用域,且完成管理员同意授权,确保第二个应用请求令牌时可获取对应作用域声明
2. OAuth2_Proxy核心参数配置
需调整oauth2_proxy的启动参数(或Helm values配置),启用JWT令牌校验能力,必选配置如下:
- 指定身份提供商为Azure AD:
--provider=azure - 绑定Azure AD租户ID:
--azure-tenant=<你的Azure AD租户ID> - 配置令牌受众校验规则,匹配第一个应用的标识:
--audience=<第一个应用的客户端ID>,也可填写自定义API前缀api://<第一个应用的客户端ID> - 开启Authorization头Bearer令牌校验,跳过Cookie会话校验逻辑:
--skip-jwt-bearer-tokens=true - 配置JWT签发方白名单,关联Azure AD租户的令牌签发地址:
--extra-jwt-issuers=https://sts.windows.net/<你的Azure AD租户ID>/=<第一个应用的客户端ID>,如果使用v2.0端点申请令牌,签发地址改为https://login.microsoftonline.com/<你的Azure AD租户ID>/v2.0 - (可选)开启作用域强校验,确保令牌仅包含授权作用域可访问:
--scope=api://<第一个应用的客户端ID>/access_as_user
3. 校验逻辑注意事项
oauth2_proxy对AccessToken的默认校验规则无需额外调整,自动覆盖以下校验项:
- 令牌签名有效性:自动拉取Azure AD公开的JWKS公钥集完成签名校验,无需手动配置公钥
- 令牌有效期:自动拒绝过期令牌
- 受众一致性:令牌的
aud声明必须匹配配置的audience值- 签发方一致性:令牌的
iss声明必须匹配配置的extra-jwt-issuers中的签发地址
4. 第二个应用侧令牌请求调整
第二个应用请求AccessToken时,请求参数中的scope必须显式指定为第一个应用暴露的自定义作用域api://<第一个应用的客户端ID>/access_as_user,不能使用默认的Graph API或者其他资源的作用域,否则获取到的令牌受众不符合校验要求。
内容的提问来源于stack exchange,提问作者Lukasz Dynowski
相关产品推荐
相关产品推荐

