首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Keycloak:未为联邦用户保存的授权范围

Keycloak:未为联邦用户保存的授权范围
EN

Stack Overflow用户
提问于 2020-01-08 11:09:51
回答 1查看 940关注 0票数 0

问题:

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

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

使用本机用户,一切都很好。我批准并成功完成登录。

看一看用户的同意,就可以确认一切正常。

使用联邦用户,登录失败,并收到以下消息。

代码语言:javascript
复制
[invalid_scope] Client no longer has requested consent from user

查看用户的同意,我们发现没有添加测试客户端作用域。

尝试将代码交换为令牌,将在Keycloak日志中产生一个合适的错误。

代码语言:javascript
复制
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

所有进一步的登录尝试都将只请求批准缺少的测试客户端范围,但它永远不会添加到同意中。

问题:

  1. 这一切为什么要发生?
  2. 我该怎么做呢?
EN

回答 1

Stack Overflow用户

发布于 2020-01-08 11:31:26

您似乎没有将作用域列表作为URL中的查询参数传递,其构造是为了启动Keycloak身份验证。请检查您的身份验证URL。

代码语言:javascript
复制
 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);
        }

您的错误来自这里。如果您查看TokenManager.getRequestedClientScopes (第523行),它将检查用户是否仍然同意所有请求的客户范围。因此,我认为您可以尝试添加请求URL中的所有作用域。例如,客户%20配置文件.希望能帮上忙。

此外,您还可以在Keycloak客户端(Scopes选项卡)上启用此设置。

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

https://stackoverflow.com/questions/59644544

复制
相关文章

相似问题

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