首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >邮递员使用错误(胡说八道?)针对密钥隐藏服务器的OAuth2流中的代码

邮递员使用错误(胡说八道?)针对密钥隐藏服务器的OAuth2流中的代码
EN

Stack Overflow用户
提问于 2020-03-13 10:04:19
回答 1查看 4.3K关注 0票数 0

我正在尝试使用Postman (版本7.20.0-Linux5.5.8-200.fc31.x86_64/x64)来使用OAuth2.0“授权代码”流对由Google作为IdP支持的Keycloak 9.0.0服务器进行身份验证。

在试图为访问/刷新令牌交换代码时,Postman将向.../token端点发送以下信息:

代码语言:javascript
复制
grant_type:    authorization_code
code:          4/xgFPM8rkZXA1pWguPMHPKg8GS3BrI7whtmSq2U2K4_4Cy62m10y2l3IQp3KuiLRyaLaZWKCUiGJGEWVJ9K4zcTc
redirect_uri:  http://localhost:3002
client_id:     mission-control
client_secret: 3cc09c80-••••-••••-••••-••••••••

这在Keycloak中失败,并在邮递员控制台中确认了以下错误:

代码语言:javascript
复制
POST /auth/realms/test-realm/protocol/openid-connect/token HTTP/1.1
Content-Type: application/x-www-form-urlencoded
User-Agent: PostmanRuntime/7.23.0
Accept: */*
Cache-Control: no-cache
Postman-Token: f2cfc8be-a911-4bc6-b5be-dbfab46d3a56
Host: localhost:8080
Accept-Encoding: gzip, deflate, br
Content-Length: 246
Connection: keep-alive
grant_type=authorization_code&code=4%2FxgFPM8rkZXA1pWguPMHPKg8GS3BrI7whtmSq2U2K4_4Cy62m10y2l3IQp3KuiLRyaLaZWKCUiGJGEWVJ9K4zcTc&redirect_uri=http%3A%2F%2Flocalhost%3A3002&client_id=mission-control&client_secret=3cc09c80-••••-••••-••••-••••••••
HTTP/1.1 400
Connection: keep-alive
Cache-Control: no-store
Pragma: no-cache
Content-Type: application/json
Content-Length: 62
Date: Fri, 13 Mar 2020 08:36:02 GMT
{"error":"invalid_grant","error_description":"Code not valid"}

Keycloak日志显示,此令牌格式错误:

代码语言:javascript
复制
keycloak_1  | 09:53:23,219 WARN  [org.keycloak.protocol.oidc.utils.OAuth2CodeParser] (default task-35) Invalid format of the code
keycloak_1  | 09:53:23,219 WARN  [org.keycloak.events] (default task-35) type=CODE_TO_TOKEN_ERROR, realmId=Test Realm, clientId=mission-control, userId=null, ipAddress=172.20.0.1, error=invalid_code, grant_type=authorization_code, client_auth_method=client-secret

为了检查Keycloak或Postman是否有错误,在Netcat的帮助下,我在CLI上走过了相同的步骤:

在CLI上,在netcat的帮助下,我可以成功地遍历流,并看到不同的令牌格式:

启动netcat服务器以从浏览器窗口捕获回调:$ nc -lk localhost 3002

  • Open --在我的浏览器http://localhost:8080/auth/realms/test-realm/protocol/openid-connect/auth?client_id=mission-control&redirect_uri=http%3A%2F%2Flocalhost%3A3002&response_type=code&scope=openid

  • 中使用谷歌单击登录流,provider.

  • The netcat服务器将收到类似于此GET /?code=3b9ac786-f9d1-40f9-b884-35e17b2fa756.70a3be09-8edf-47ed-9803-d08550a07faa.8794bba2-6f2b-4512-8bd7-6d5073852d1c (以及更多)的

  • ,我可以成功地将此代码交换为令牌:curl -XPOST -H "Content-Type: application/x-www-form-urlencoded" -d "grant_type=authorization_code&code=3b9ac786-f9d1-40f9-b884-35e17b2fa756.70a3be09-8edf-47ed-9803-d08550a07faa.8794bba2-6f2b-4512-8bd7-6d5073852d1c&redirect_uri=http%3A%2F%2Flocalhost%3A3002&client_id=mission-control&client_secret=3cc09c80-48bc-46fd-bc91-232e6bbb681a" http://localhost:8080/auth/realms/test-realm/protocol/openid-connect/token

我不知道Postman OAuth流在哪里将“代码”从响应体中提取出来,它用于将令牌交换端点发送到令牌交换端点--令牌之间的差异很明显,当手动遍历它时(相同的客户机、相同的令牌、相同的oauth2服务器),代码就会松动:

代码语言:javascript
复制
3b9ac786-f9d1-40f9-b884-35e17b2fa756.70a3be09-8edf-47ed-9803-d08550a07faa.8794bba2-6f2b-4512-8bd7-6d5073852d1c

当使用Postman时,它将此作为代码发送:

代码语言:javascript
复制
4/xgFPM8rkZXA1pWguPMHPKg8GS3BrI7whtmSq2U2K4_4Cy62m10y2l3IQp3KuiLRyaLaZWKCUiGJGEWVJ9K4zcTc

我怎样才能让邮递员从网址中提取回调?code呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-25 15:13:23

callback_uri和令牌OAuth服务器端点位于相同(localhost)域时,这是邮递员确认的错误。

Update:这个问题是在2020年9月发行的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60668411

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档