将Vault配置为OIDC Provider后调用token接口出现HTTP/2协议错误
解决Vault OIDC Provider获取Token时的HTTP/2协议错误
问题场景
按照HashiCorp官方流程配置Vault作为OIDC Provider后,调用token端点获取access token时触发报错。执行的请求命令如下:
BASIC_AUTH_CREDS=$(printf "%s:%s" "$CLIENT_ID" "$CLIENT_SECRET" | base64) curl \ --request POST \ --header "Authorization: Basic $BASIC_AUTH_CREDS" \ -H 'Content-Type: application/x-www-form-urlencoded' \ -d "code=8oeahsnfHI9XYBw7yTrY2fIc9bUMNUwd" \ -d "grant_type=authorization_code" \ --data-urlencode "scope=openid" \ -d "redirect_uri=http://127.0.0.1:9200/v1/auth-methods/oidc:authenticate:callback" \ https://127.0.0.1:8200/v1/identity/oidc/provider/my-provider/token
报错信息:
curl: (92) HTTP/2 stream 0 was not closed cleanly: PROTOCOL_ERROR (err 1)
实用解决步骤
- 强制使用HTTP/1.1协议:部分环境下Vault API对HTTP/2的兼容性存在问题,给curl添加
--http1.1参数禁用HTTP/2支持:BASIC_AUTH_CREDS=$(printf "%s:%s" "$CLIENT_ID" "$CLIENT_SECRET" | base64) curl \ --http1.1 \ --request POST \ --header "Authorization: Basic $BASIC_AUTH_CREDS" \ -H 'Content-Type: application/x-www-form-urlencoded' \ -d "code=8oeahsnfHI9XYBw7yTrY2fIc9bUMNUwd" \ -d "grant_type=authorization_code" \ --data-urlencode "scope=openid" \ -d "redirect_uri=http://127.0.0.1:9200/v1/auth-methods/oidc:authenticate:callback" \ https://127.0.0.1:8200/v1/identity/oidc/provider/my-provider/token - 排查TLS证书问题:如果Vault使用自签名证书,curl可能因证书验证失败触发协议错误,可临时添加
--insecure参数跳过验证(生产环境不推荐)。 - 校验客户端凭证:确认
CLIENT_ID和CLIENT_SECRET与Vault中配置的OIDC客户端完全匹配,base64编码过程中没有混入额外空格或换行符。 - 检查授权码有效性:OIDC授权码仅能使用一次且有时间限制,确认当前使用的
code未过期、未被消耗。
内容的提问来源于stack exchange,提问作者Ajay
相关产品推荐
相关产品推荐

