Roh*_*esh 7 java keycloak keycloak-services
首先,我对Keycloak非常陌生,请问如果我要问的问题可能是错的。
我已经安装了Keycloak服务器,并且可以使用以下命令访问Web UI:
我的要求是通过将领域用户传递给k Keycloak API来验证领域用户,并从那里获取令牌作为响应,然后将该令牌传递给我的其他Web API调用。
但是我找不到关于如何执行此操作的简单指南...
更新:
从使用UI KEYCLOAK:
到目前为止:
我能够创建一个realm:例如:DemoRealm
在Realm我创建的客户端下:例如:DemoClient
在客户端下,我创建了用户:例如: DemoUser
使用方法POSTMAN:
我也能够成功使用获取令牌
http://localhost:8080/auth/realms/DemoRelam/protocol/openid-connect/token
POST:
{
"grant_type": "client_credentials",
"username": "",
"password": "",
"client_secret":"",
"client_id":"DemoClient"
}
Run Code Online (Sandbox Code Playgroud)
作为回应,我得到了令牌。
{
"access_token": "eyJhbGciOiJSUzI1NiIsINVSHGhepnDu13SwRBL-v-y-04_6e6IJbMzreZwPI-epwdVPQe-ENhpvms2WdGM_DmgMLZ8YQFS4LDl9R7ZHT8AgXe-WCFV6OFkA7zvdeFwQ4kVVZE0HlNgHgoi4DrgMfwwz_ku1yJNJP3ztTY1nEqmA",
"expires_in": 300,
"refresh_expires_in": 1800,
"refresh_token": "eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJRRnB5YlloMGVEektIdlhOb3JvaFUxdlRvWVdjdP3vbfvk7O0zvppK9N4-oaUqZSr0smHv5LkuLDQYdPuxA",
"token_type": "bearer",
"not-before-policy": 0,
"session_state": "bb1c586a-e880-4b96-ac16-30e42c0f46dc"
}
Run Code Online (Sandbox Code Playgroud)
此外,我深入研究了更多细节,并找到了此API指南:
http://www.keycloak.org/docs-api/3.0/rest-api/index.html#_users_resource
在本指南中,提到了可以使用“获取用户”来获取领域的用户返回用户列表,并根据查询参数进行过滤
GET /admin/realms/{realm}/users
Run Code Online (Sandbox Code Playgroud)
但是,当我POSTMAN用来获取用户时,我得到了403错误代码。我正在传递与在上一步中获得的身份验证相同的令牌。
http://localhost:8080/auth/admin/realms/DemoRelam/users
Run Code Online (Sandbox Code Playgroud)
谁能指导我?
mas*_*ick 21
您有 2 个选择:您可以代表某个用户(正如Adnan Khan指出的那样),或者为此创建一个专用客户端。
1)创建一个机密客户端(我想你已经有了一个)
2)创建一个用户并为其分配适当的角色:例如view-users来自realm-management组
3)获取令牌(我正在使用 curl 和jq):
KCHOST=https://yourkeycloak.com
REALM=realm
CLIENT_ID=confidential-client
CLIENT_SECRET=xxxxxxx-yyyyyy-zzzzzzzz
UNAME=user
PASSWORD=passwd
ACCESS_TOKEN=`curl \
-d "client_id=$CLIENT_ID" -d "client_secret=$CLIENT_SECRET" \
-d "username=$UNAME" -d "password=$PASSWORD" \
-d "grant_type=password" \
"$KCHOST/auth/realms/$REALM/protocol/openid-connect/token" | jq -r '.access_token'`
Run Code Online (Sandbox Code Playgroud)
4) 最后调用 Admin REST API用户端点:
curl -X GET -H "Authorization: Bearer $ACCESS_TOKEN" $KCHOST/auth/admin/realms/$REALM/users | jq
Run Code Online (Sandbox Code Playgroud)
1)创建一个机密客户端并确保将启用服务帐户设置切换为 On
2)转到Service account roles tab并为该客户选择适当的角色,例如realm-admin从realm-management组中
3)获取访问令牌
KCHOST=https://yourkeycloak.com
REALM=realm
CLIENT_ID=protector-of-the-realm
CLIENT_SECRET=xxxxxxx-yyyyyyyy-zzzzzzzzz
ACCESS_TOKEN=`curl \
-d "client_id=$CLIENT_ID" -d "client_secret=$CLIENT_SECRET" \
-d "grant_type=client_credentials" \
"$KCHOST/auth/realms/$REALM/protocol/openid-connect/token" | jq -r '.access_token'`
Run Code Online (Sandbox Code Playgroud)
4)调用REST API端点:
curl -X GET -H "Authorization: Bearer $ACCESS_TOKEN" $KCHOST/auth/admin/realms/$REALM/users | jq
Run Code Online (Sandbox Code Playgroud)
PS 为了调试,我刚刚编写了一个名为brauzie的 CLI 工具,它可以帮助您获取和分析 JWT 令牌(范围、角色等)。它可以用于公共和机密客户端。您也可以使用 Postman 和https://jwt.io
哈 :)
keycloak 中的用户是特定领域的,并非每个用户都可以访问它们。在管理仪表板中为用户分配特定角色后,您将能够通过管理 API 获取所有用户。简单地做
用户 > myuser > 角色映射 > 客户端角色 > 领域管理
为用户分配两个角色中的任意一个manage-users或view-users。
生成一个新的令牌。
使用新令牌访问 API
你将拥有你的用户
PS我认为你应该将你的问题标题更新为更相关的内容。
| 归档时间: |
|
| 查看次数: |
8269 次 |
| 最近记录: |