问题:
我有一个具有混合用户基础的Keycloak领域。有些用户是本地用户(本机用户),有些是通过自定义用户存储SPI实现(联邦用户)提供的。
当我执行OIDC登录时,Keycloak要求批准4个作用域(测试客户端、配置文件、电子邮件、角色)。请求是用范围openid执行的。Keycloak将其转换为这四个作用域。测试-客户端是客户端名称。管理UI中没有显示此名称的实际客户范围。
使用本机用户,一切都很好。我批准并成功完成登录。
看一看用户的同意,就可以确认一切正常。

使用联邦用户,登录失败,并收到以下消息。
[invalid_scope] Client no longer has requested consent from user查看用户的同意,我们发现没有添加测试客户端作用域。

尝试将代码交换为令牌,将在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所有进一步的登录尝试都将只请求批准缺少的测试客户端范围,但它永远不会添加到同意中。
问题:
发布于 2020-01-08 11:31:26
您似乎没有将作用域列表作为URL中的查询参数传递,其构造是为了启动Keycloak身份验证。请检查您的身份验证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);
}您的错误来自这里。如果您查看TokenManager.getRequestedClientScopes (第523行),它将检查用户是否仍然同意所有请求的客户范围。因此,我认为您可以尝试添加请求URL中的所有作用域。例如,客户%20配置文件.希望能帮上忙。

此外,您还可以在Keycloak客户端(Scopes选项卡)上启用此设置。
https://stackoverflow.com/questions/59644544
复制相似问题