在反向代理后运行HCP Vault时,如何返回正确的openid-configuration?
在Hashicorp Cloud Platform(HCP)上运行的Vault中配置OIDC Provider时,由于防火墙限制,前端部署了Nginx反向代理。虽然可以通过https://my-reverse-proxy.example.com/v1/admin/identity/oidc/provider/my-provider/.well-known/openid-configuration访问OIDC发现文档,但文档内的所有端点均指向Vault集群自身地址,导致外部客户端无法通过代理正常访问:
{ "issuer": "https://my-vault-cluster.hashicorp.cloud:8200/v1/admin/identity/oidc/provider/my-provider", "jwks_uri": "https://my-vault-cluster.hashicorp.cloud:8200/v1/admin/identity/oidc/provider/my-provider/.well-known/keys", "authorization_endpoint": "https://my-vault-cluster.hashicorp.cloud:8200/ui/vault/admin/identity/oidc/provider/my-provider/authorize", "token_endpoint": "https://my-vault-cluster.hashicorp.cloud:8200/v1/admin/identity/oidc/provider/my-provider/token", "userinfo_endpoint": "https://my-vault-cluster.hashicorp.cloud:8200/v1/admin/identity/oidc/provider/my-provider/userinfo", ... }
需要解决该问题,且由于是HCP环境,无法完全控制Vault配置,询问是否需要在Nginx中设置特定请求头或进行其他配置。
1. 配置Nginx传递反向代理请求头
Vault会根据请求中的X-Forwarded-*系列请求头生成OIDC发现文档中的端点地址,你需要在Nginx配置中添加这些头,让Vault感知到外部访问的实际域名、协议和端口:
在Nginx对应的location配置块中添加以下内容:
location /v1/admin/identity/oidc/provider/my-provider/ { proxy_pass https://my-vault-cluster.hashicorp.cloud:8200; # 传递外部访问的协议、域名和端口 proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Port $server_port; # 传递真实客户端IP(可选但推荐) proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }
注:HCP托管的Vault通常默认信任
X-Forwarded-*头,若配置后仍有问题,可在HCP控制台检查Vault集群的相关信任设置。
2. 检查HCP Vault的API地址配置(可选)
如果上述Nginx配置无效,可尝试在HCP控制台查看是否允许自定义Vault的api_addr参数。该参数决定了Vault对外暴露的API地址,若能修改,将其设置为你的反向代理地址https://my-reverse-proxy.example.com,Vault生成的OIDC端点会直接使用该地址。
3. 确保OIDC客户端配置一致
验证你的OIDC客户端(如业务应用)中配置的issuer地址与反向代理地址完全一致,即https://my-reverse-proxy.example.com/v1/admin/identity/oidc/provider/my-provider,避免因issuer不匹配导致验证失败。
内容的提问来源于stack exchange,提问作者Imre Kerr

