gpt4 book ai didi

curl - key 斗篷错误 : code already used for userSession

转载 作者:行者123 更新时间:2023-12-05 04:29:35 51 4
gpt4 key购买 nike

我正在尝试使用 Keycloak 处理 OIDC(标准)身份验证流程。使用 Keycloak docker 图像 quay.io/keycloak/keycloak:latest (18.0.0) 启动时没有额外的配置(没有数据库或任何东西)。我想要的是完全执行 this 中的步骤邮政;我已经在浏览器中导航到我的本地 Keycloak /auth 端点,登录,并将代码发送到我在客户端设置中指定的重定向 url (http://localhost:9000/)。但是,在“交换访问 token 的授权代码”步骤中,我不断收到 Keycloak 的响应,内容为 {"error":"invalid_grant","error_description":"Code not valid"}。 Keycloak 服务器日志输出:

2022-05-18 01:22:35,906 WARN  [org.keycloak.protocol.oidc.utils.OAuth2CodeParser] (executor-thread-48) Code '193bfcc4-6e24-45f9-bc36-222ee3f0839b' already used for userSession '2b17e705-3821-42cb-819d-204245e38527' and client '282cfa97-627d-48ac-9656-8e0a2aaa198a'.
2022-05-18 01:22:35,906 WARN [org.keycloak.events] (executor-thread-48) type=CODE_TO_TOKEN_ERROR, realmId=myrealm, clientId=myclient, userId=null, ipAddress=172.17.0.1, error=invalid_code, grant_type=authorization_code, code_id=2b17e705-3821-42cb-819d-204245e38527, client_auth_method=client-secret

谷歌搜索让我找到了 this帖子,这看起来与我遇到的问题完全相同。但是,尝试对该发帖者的解决方案进行不同的变体都没有用。

注意:我能够使用grant_type=password 类型将负载发送到Keycloak 的/token 端点,但这不是我想。我需要能够复制 grant_type=authorization_code 流程。此外,由于某些原因,我不想使用隐式流程——我需要遍历标准流程。

有没有人可以看到发生了什么并指出我的解决方案?非常感谢。

编辑:为了回应 Jan Garaj 的评论,我将尽可能多地添加有关我已采取的步骤的详细信息...

  1. 从 Docker 镜像启动 Keycloak:

$ docker run -p 8080:8080 -e KEYCLOAK_ADMIN=admin -e KEYCLOAK_ADMIN_PASSWORD=admin quay.io/keycloak/keycloak:latest start-dev

  1. 按照步骤创建领域、用户和客户端 here ,将客户端“根 URL”更改为 http://localhost:9000/

  2. 将客户端的“访问类型”更改为 secret 。所有其他设置均保留为默认设置。 (我不知道到底什么是相关的,但下面的设置看起来很...???)

  • 客户端协议(protocol):openid-connect
  • 访问类型: secret
  • 启用标准流程:true
  • 启用隐式流:false
  • 启用直接访问权限:true
  • 身份验证流程覆盖:未修改

(还有什么……?)

  1. 在终端中,启动nc -l 9000

  2. 在浏览器中,导航到 http://localhost:8080/realms/myrealm/protocol/openid-connect/auth?client_id=myclient&response_type=code&state=fj8o3n7bdy1op5;使用用户名和密码登录。

  3. 在终端中,查看(尝试)使用授权码从 Keycloak 重定向。

GET/?state=fj8o3n7bdy1op5&session_state=5216ae35-89f6-4a42-a39a-b5545ff05c37&code=2ed44e9c-dc71-4ac1-9953-0e6e86f2a82d.5216ae35-89f6-4a42-a39a-b5545ff05c37.650fb336-8b0f-4e13-b2d8 -725e188eea39

  1. 在另一个终端:
curl -v --location -X POST -H 'Content-Type: application/x-www-form-urlencoded' \
-d 'grant_type=authorization_code' \
-d 'client_id=myclient' \
-d 'client_secret=b0B430pRlfAs1rFurAqUKEmxkPTBptnh' \
-d 'code=2ed44e9c-dc71-4ac1-9953-0e6e86f2a82d.5216ae35-89f6-4a42-a39a-b5545ff05c37.650fb336-8b0f-4e13-b2d8-725e188eea39' \
-d 'redirect_uri=http://localhost:9000/' \
http://localhost:8080/realms/myrealm/protocol/openid-connect/token

其中 client_secret 取 self 的客户端的凭据 View 。这会导致上面粘贴的错误响应和日志输出。

我尝试过的变体:

  • 手动对重定向 uri 进行 url 编码
  • 从负载中删除 redirect_uri 字段到 /token
  • 以上所有使用 Keycloak v15.0.2(与上面链接中的版本相同)
  • 使用 httpbin.org 代替 localhost:9000

最佳答案

https://openid.net/specs/openid-connect-core-1_0.html#TokenRequestValidation

Ensure that the redirect_uri parameter value is identical to the redirect_uri parameter value that was included in the initial Authorization Request. If the redirect_uri parameter value is not present when there is only one registered redirect_uri value, the Authorization Server MAY return an error (since the Client should have included the parameter) or MAY proceed without an error (since OAuth 2.0 permits the parameter to be omitted in this case).

您的授权请求没有指定重定向 URI,但您的 token 请求指定了重定向 URI,因此在这种情况下,授权服务器(在这种特殊情况下为 Keycloak)返回了一个错误。

解决方案:在授权请求中指定具有正确值的redirect_uri参数。

关于curl - key 斗篷错误 : code already used for userSession,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72282569/

51 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com