Keycloak 返回未经授权 401

kuz*_*zua 6 rest oauth oauth-2.0 postman keycloak

我正在本地运行 bitnami 的 Keycloak 图像。我想做的是;使用 Keycloak REST API。但无论我多么努力,我都会得到 401。

我已经完成了文档中写的内容。所以这是客户端的屏幕截图。access typeconfidential,服务帐户是enabled。这是testapi我创建的客户端;

在这里您可以看到服务帐户角色; 查看和管理我分配的用户manage-usersview-user角色。

首先,为了得到access_token,我正在使用client_idclient_credential。正如你从这里看到的; 在此输入图像描述 我获取访问令牌没有问题。

但是当我尝试获取用户列表或创建新用户时,我总是得到 401。在这里您可以看到我使用了从 http://localhost:8092/auth/realms/test/protocol 获得的相同 access_token /openid-connect/令牌

在此输入图像描述

这没有意义。我开始考虑砸电脑。

任何帮助将不胜感激

小智 0

对于遇到完全相同问题并最终进入此页面的任何人,这里是解决方案:

  1. 将所有 keycloak 设置保留为默认设置,无论您使用bitnami/keycloak、 或keycloak/keycloak,您都无需在管理控制台中进行任何更改

  2. 使用 GET 方法调用此端点:

    curl -X GET http://keycloak:8080/realms/master/.well-known/openid-configuration
    
    Run Code Online (Sandbox Code Playgroud)

    确保颁发者端点正确。

  3. 通过命令请求令牌:

    access_token=`curl -H "Content-Type: application/x-www-form-urlencoded" -d "client_id=admin-cli" -d "username=user" -d "password=bitnami" -d "grant_type=password" -d "scope=openid" "http://keycloak:8080/realms/master/protocol/openid-connect/token" | jq -r .access_token`
    
    Run Code Online (Sandbox Code Playgroud)

    确保您没有忘记scope=openid

  4. 通过调用 userinfo 来验证此令牌60 seconds

    curl -H "Authorization: bearer ${access_token}" -H "Content-Type: application/x-www-form-urlencoded" -d "scope=openid" "http://keycloak:8080/realms/master/protocol/openid-connect/userinfo"
    
    Run Code Online (Sandbox Code Playgroud)

    确保您scope=openid也没有忘记。