如何配置Insomnia以公共客户端模式获取OAuth 2.0令牌(无密钥)
公共客户端在Insomnia中获取OAuth2令牌的解决方案
可以在Insomnia中以无密钥的公共客户端身份从Okta等OAuth2授权服务器获取访问令牌和ID令牌,你的问题出在令牌请求的认证方式错误,调整后即可解决。
问题核心原因
你当前的令牌请求用了Authorization: Basic <base64(client_id:)>的HTTP头,这种认证方式是给有机密密钥的客户端设计的。而公共客户端(无密钥)按照RFC 6749要求,必须把client_id作为表单参数传递,不能用Basic Auth头——Okta会因为识别到不匹配的客户端认证方式,返回invalid_client错误。
具体修复步骤
- 删掉请求里的
Authorization头字段,不要用Basic Auth方式传递client_id - 在令牌请求的
x-www-form-urlencoded参数列表里,新增client_id=<你的公共客户端ID>,和现有的grant_type、code、redirect_uri等参数放在一起 - 确保
redirect_uri和你发起授权请求时用的地址完全一致,code_verifier也和授权阶段生成的code_challenge对应
调整后的请求示例
POST /oauth2/default/v1/token HTTP/2 Host: dev-[redacted].okta.com user-agent: insomnia/2022.6.0 content-type: application/x-www-form-urlencoded accept: application/x-www-form-urlencoded, application/json content-length: [自动计算长度] grant_type=authorization_code&code=[redacted]&redirect_uri=[redacted]&state=any+random+string&code_verifier=[redacted]&client_id=<你的公共客户端ID>
补充说明
你选择Insomnia 2022.6.0版本是正确的,新版本的code_challenge_method不符合RFC 7636规范,会和授权服务器产生兼容性问题,旧版本可以规避这个问题。
内容的提问来源于stack exchange,提问作者WesternRover
相关产品推荐
相关产品推荐

