Java KeyClope用户验证和获取令牌
首先,我对keybeave很陌生,如果我问的问题可能有误,请原谅 我已经安装了KeyClope服务器,我可以使用以下方式访问Web UI: 我的需求是通过将域用户传递给k来验证它 keydape API和从那里获取令牌作为响应,然后将此令牌传递给我的其他Web API调用 但是我找不到一个简单的指南来指导我如何做到这一点 更新:Java KeyClope用户验证和获取令牌,java,keycloak,keycloak-services,Java,Keycloak,Keycloak Services,首先,我对keybeave很陌生,如果我问的问题可能有误,请原谅 我已经安装了KeyClope服务器,我可以使用以下方式访问Web UI: 我的需求是通过将域用户传递给k来验证它 keydape API和从那里获取令牌作为响应,然后将此令牌传递给我的其他Web API调用 但是我找不到一个简单的指南来指导我如何做到这一点 更新: 使用来自keydape的用户界面: 到目前为止: 我能够创建一个领域: e、 g:DemoRealm 在领域下我创建了客户端: e、 g:DemoClient 在
使用来自
keydape
的用户界面:
到目前为止:
- 我能够创建一个
: e、 g:领域
DemoRealm
- 在
我创建了客户端: e、 g:领域下
DemoClient
- 在客户端下,我创建了用户:
e、 g:
DemoUser
邮递员
:
我还可以使用
http://localhost:8080/auth/realms/DemoRelam/protocol/openid-connect/token
POST:
{
"grant_type": "client_credentials",
"username": "",
"password": "",
"client_secret":"",
"client_id":"DemoClient"
}
作为回应,我得到了代币
{
"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"
}
此外,我还深入了解了更多细节,发现了以下API指南:
在本指南中提到,我可以使用
Get users返回根据查询参数筛选的用户列表
GET /admin/realms/{realm}/users
但是当我使用POSTMAN
获取用户时,我得到的是403错误代码。我传递的令牌与我在前面步骤中获得的身份验证相同
http://localhost:8080/auth/admin/realms/DemoRelam/users
有人能为我指点迷津吗?Keyclope中的用户是特定于领域的,并非每个用户都可以访问它们。在管理仪表板中为用户分配特定角色后,您将能够通过管理API获取所有用户。干脆
管理用户
或查看用户
另外,我认为你应该更新你的问题标题,使之更相关 您有两种选择:您可以代表某个用户(正如Adnan Khan所指出的),或者为此创建一个专用客户端 代表用户 1) 创建一个机密客户(我想你已经有了) 2) 创建用户并为其分配适当的角色:例如,
领域管理
组中的查看用户
3) 获取令牌(我使用curl和):
4) 最后调用AdminRESTAPI:
代表客户(服务账户)
1) 创建一个机密客户端,并确保将“服务帐户启用”设置切换为“打开”
2) 转到服务帐户角色选项卡
并为此客户端选择适当的角色,例如从领域管理
组中选择领域管理员
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'`
4) 调用REST API端点:
curl -X GET -H "Authorization: Bearer $ACCESS_TOKEN" $KCHOST/auth/admin/realms/$REALM/users | jq
另外,为了调试,我刚刚编写了一个名为
将帮助您获取和分析JWT令牌(范围、角色等)。它可以
适用于公共和机密客户。你也可以
使用邮递员和
HTH:)你是说你刚刚安装了KeyClope,并在它未与WEB应用程序集成时运行它?如果你会看到太多的东西可以通过互联网和keydove文档获得,那么如何将keydove与web集成application@SubodhJoshi我不想将keydepeat与web应用程序集成。我将在relam下传递用户/客户端,并获取令牌,然后将此令牌传递给其他api,我将再次使用ui验证此令牌。可能无法使用KeyClope rest api或admin cli。@SubodhJoshi我已用我目前所获得的更新了我的问题。您能帮我吗?我认为这将对您有所帮助。已获得访问令牌,但不知道如何使用postman进行测试。>您应该只需要在Postman中添加authrisation标头,已经获得访问令牌,但不知道如何使用Postman进行测试。>你应该只需要在邮递员中添加授权标题,我发现了这个,看看它是否对你有帮助,否则我只能在早上写正确的答案。现在我正在使用我的手机进行通讯。这在KeyClope 12中更改了吗?我似乎找不到
服务帐户角色
选项卡?
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'`
curl -X GET -H "Authorization: Bearer $ACCESS_TOKEN" $KCHOST/auth/admin/realms/$REALM/users | jq