如何自定义Hashi Vault JWT核心声明及获取JWK公钥集?
自定义Hashi Vault OIDC JWT核心声明的方法
一、修改iss(签发者)声明
Hashi Vault默认的iss值基于其api_addr配置,你可以通过两种方式自定义:
- 全局配置修改:更新Vault的
api_addr为你的自定义域名(比如https://vault.yourdomain.com),重启后OIDC生成的iss会自动使用该地址。 - OIDC提供商级配置:创建OIDC提供商时直接指定
issuer参数:vault write identity/oidc/provider/your-provider-name \ issuer="https://your-custom-issuer-domain/v1/identity/oidc" \ allowed_client_ids="your-client-id"
二、自定义aud(受众)声明
在创建OIDC客户端时,直接指定audience参数为你的应用标识即可:
vault write identity/oidc/client/your-client-name \ client_id="your-client-id" \ client_secret="your-client-secret" \ audience="your-app-audience" \ redirect_uris="https://your-app-callback-url"
生成的JWT中aud字段会自动设置为该值。
三、自定义sub(主体)声明
要实现可读的sub值,需结合实体元数据和令牌策略模板:
- 给实体添加自定义元数据:
vault write identity/entity/id/<你的实体ID> \ metadata=username="jane-smith" \ metadata=employee_id="EMP-12345" - 创建自定义令牌策略模板:
创建一个包含自定义sub的模板文件(比如custom_token_template.hcl):{ "iss": "{{ issuer }}", "aud": "{{ audience }}", "sub": "{{ entity.metadata.username }}", "exp": "{{ expiration }}", "iat": "{{ issued_at }}", "namespace": "{{ namespace }}" } - 将模板关联到OIDC客户端:
后续生成的JWT中vault write identity/oidc/client/your-client-name \ token_template="@custom_token_template.hcl"sub会替换为实体元数据里的username值。
JWK公钥集URL
Hashi Vault会自动为每个OIDC提供商生成JWK公钥集,URL格式为:
https://your-vault-domain/v1/identity/oidc/provider/<你的提供商名称>/jwks
你的应用可以通过该URL获取公钥,用于验证JWT的签名有效性。
内容的提问来源于stack exchange,提问作者theory
相关产品推荐
相关产品推荐

