有没有办法使用管理员帐户通过 REST WITHOUT 获取 Keycloak 领域上的用户列表?也许可以从管理控制台分配某种角色?寻找任何想法。
现在,我正在使用管理员凭据来获取访问令牌,然后使用该令牌从
realm/users
端点拉取用户。
获取令牌(通过
request
从 Node.js 应用程序):
uri: `${keycloakUri}/realms/master/protocol/openid-connect/token`,
form: {
grant_type: 'password',
client_id: 'admin-cli',
username: adminUsername,
password: adminPassword,
}
使用代币:
uri: `${keycloakUri}/admin/realms/${keycloakRealm}/users`,
headers: {
'authorization': `bearer ${passwordGrantToken}`,
}
我希望能够使用客户端应用程序中的通用用户信息(用户名、电子邮件、全名)。
您需要从
view-users
客户端为所需用户分配 realm-management
角色。这将是用户的配置:
然后您可以从
${keycloakUri}/admin/realms/${keycloakRealm}/users
端点获取所有用户。这是从 enpoint 检索到的信息,通过 Postman 访问:
此外,与所提出的问题无关,我强烈建议您不要使用
grant_type=password
,除非您绝对需要。来自 keycloak 博客:
RESULT=`curl --data "grant_type=password&client_id=curl&username=user&password=password" http://localhost:8180/auth/realms/master/protocol/openid-connect/token`
这有点神秘,幸运的是这不是您真正应该获取代币的方式。 Web 应用程序应通过重定向到 Keycloak 登录页面来获取令牌。我们这样做只是为了测试该服务,因为我们还没有可以调用该服务的应用程序。基本上,我们在这里所做的是调用 Keycloaks OpenID Connect 令牌端点,并将授权类型设置为密码,这是资源所有者凭证流程,允许将用户名和密码交换为令牌。
另请参阅 Oauth2 规范。
我遇到了同样的问题,我通过以下步骤解决了它:
第1步:创建一个领域,转到设置选项卡并选择以下内容(与下图匹配)并保存:
客户端协议:openid-connect
访问类型:机密
第 2 步: 根据屏幕截图提供所有范围/客户端范围/:
第 3 步: 转到凭据并选择 clientId 和 Secret
第4步:点击下面的curl获取access_token:
curl --location 'http://localhost:18080/auth/realms/test-realm/protocol/openid-connect/token' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCIgO...' \
--header 'Cookie: OPERATE-SESSION=DD9F694EE1D511CAE6E126E5503A8995; TASKLIST-SESSION=A0841A5A17C43122443A3DAC4A88060A' \
--data-urlencode 'client_id=test-realm' \
--data-urlencode 'client_secret=8lu1gy4v0Ajt5WjyjgiTXKzuLijE8lpe' \
--data-urlencode 'grant_type=client_credentials'
第5步:您将收到响应中的access_token:
{
"access_token": "eyJhbGciOiJSUzI1...I9X3Exs5a_jR_gjmHO6yLZBuoiS3G2BU8_i9Bb2DYDCWWz5awbsg",
"expires_in": 36000,
"refresh_expires_in": 0,
"token_type": "Bearer",
"not-before-policy": 0,
"scope": "profile email"
}
第6步:现在使用以下curl获取具有上述访问令牌的用户数据:
curl --location 'http://localhost:18080/auth/admin/realms/test-realm' \
--header 'Authorization: bearer eyJhbGciOiJSUzI1NiIsInR5cCI...Sa3upI9X3Exs5a_jR_gjmHO6yLZBuoiS3G2BU8_i9Bb2DYDCWWz5awbsg' \
--header 'Cookie: OPERATE-SESSION=DD9F694EE1D511CAE6E126E5503A8995; TASKLIST-SESSION=A0841A5A17C43122443A3DAC4A88060A'
回应:
{
"id": "test-realm",
"realm": "test-realm",
"displayName": "test-realm",
"displayNameHtml": "test-realm",
"failureFactor": 30,
"browserFlow": "browser",
"registrationFlow": "registration",
.
.
}