gpt4 book ai didi

java - Keycloak:未为联合用户保存授予的范围

转载 作者:行者123 更新时间:2023-12-01 19:00:26 24 4
gpt4 key购买 nike

问题:

我有一个具有混合用户群的 Keycloak 领域。有些用户是 native 用户( native 用户),有些用户是通过自定义用户存储 SPI 实现提供的(联合用户)。

当我执行 OIDC 登录时,Keycloak 要求批准 4 个范围(测试客户端、个人资料、电子邮件、角色)。该请求以 openid 范围执行。 Keycloak 将其转换为这四个范围。test-client 是客户端名称。管理 UI 中没有显示具有此名称的实际客户端范围。

<小时/>

使用本地用户一切正常。我批准并且登录成功完成。

查看用户同意确认一切正常。 enter image description here

<小时/>

使用联合用户登录失败并显示以下消息。

[invalid_scope] Client no longer has requested consent from user

查看用户同意情况,我们发现 test-client 范围未添加。 enter image description here

尝试用代码交换 token ,会在 Keycloak 日志中产生拟合错误

11:06:31,964 WARN  [org.keycloak.events] (default task-10) type=CODE_TO_TOKEN_ERROR, realmId=torment, clientId=test-client, userId=f:ff4c66e5-2a6f-465c-8418-200648a49973:dfb_user, ipAddress=127.0.0.1, error=not_allowed, grant_type=authorization_code, code_id=418dfa66-b4c8-4481-b46d-ceac97e65b39, client_auth_method=client-secret

所有进一步的登录尝试都将要求仅批准缺少的test-client范围,但它永远不会添加到同意中。

<小时/>

问题:

  1. 为什么会发生这种情况?
  2. 如何让它发挥作用?

最佳答案

您似乎没有将范围列表作为构造为启动 Keycloak 身份验证的 URL 中的查询参数传递。请检查您的身份验证 URL。

 Set<ClientScopeModel> clientScopes = TokenManager.getRequestedClientScopes(scopeParam, client);
if (!TokenManager.verifyConsentStillAvailable(session, user, client, clientScopes)) {
event.error(Errors.NOT_ALLOWED);
throw new CorsErrorResponseException(cors, OAuthErrorException.INVALID_SCOPE, "Client no longer has requested consent from user", Response.Status.BAD_REQUEST);
}

您的错误来自here 。如果你看一下TokenManager.getRequestedClientScopes (第 523 行),它检查用户是否仍然同意所有请求的客户端范围。所以,我认为你可以尝试在请求 URL 中添加所有范围。例如,http://keycloak_url/auth/realms/.......?....scope=openid%20test_client%20profile ……我希望它有帮助。 enter image description here此外,您可以在 Keycloak 客户端(“范围”选项卡)上启用此设置。

关于java - Keycloak:未为联合用户保存授予的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59644544/

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