gpt4 book ai didi

java - KeyCloak 用户验证和获取 token

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:31:18 44 4
gpt4 key购买 nike

首先,我是 Keycloak 的新手,如果我问的问题可能有误,请原谅。

我已经安装了 Keycloak 服务器,我可以使用相同的方法访问 Web UI:

http://localhost:8008/auth

我的要求是通过将领域用户传递给 k 来验证领域用户Keycloak API 并从那里获取 token 作为响应,然后将此 token 传递给我的其他 Web API 调用。

但是我无法找到有关如何执行此操作的简单指南...

更新:


使用来自 KEYCLOAK 的 UI:

到目前为止:

  • 我能够创建一个领域:例如:DemoRealm

  • Realm 下我创建了客户端:例如:DemoClient

  • 我在客户端下创建了用户:例如:DemoUser

使用 postman :

我也能够使用成功获取 token

http://localhost:8080/auth/realms/DemoRelam/protocol/openid-connect/token

POST:
{
"grant_type": "client_credentials",
"username": "",
"password": "",
"client_secret":"",
"client_id":"DemoClient"
}

作为响应,我得到了 token 。

{
"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 指南:

http://www.keycloak.org/docs-api/3.0/rest-api/index.html#_users_resource

在本指南中提到我可以使用获取用户返回用户列表,根据查询参数过滤

GET /admin/realms/{realm}/users

但是当我使用 POSTMAN 获取用户时,我收到了 403 错误代码。我传递的 token 与我在前面的步骤中获得的身份验证相同。

http://localhost:8080/auth/admin/realms/DemoRelam/users

有人可以指导我吗?

最佳答案

您有 2 个选择:您可以代表某些用户(如 Adnan Khan 指出的那样),或者为此创建一个专门的客户端。

代表用户

1) 创建一个保密客户(我想你已经有了)

2) 创建一个用户并为其分配适当的角色:例如来自 realm-management 组的 view-users

3) 获取 token (我正在使用 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'`

4) 最后调用 Admin REST API users endpoint :

curl -X GET -H "Authorization: Bearer $ACCESS_TOKEN" $KCHOST/auth/admin/realms/$REALM/users | jq

代表客户(服务帐户)

1) 创建一个 secret 客户端并确保将启用服务帐户设置切换为开启

2) 转到Service account roles 选项卡 并为此客户端选择适当的角色,例如realm-admin 来自 realm-management

3) 获取访问 token

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

P.S. For debugging I have just written a CLI tool called brauzie that would help you fetch and analyse your JWT tokens (scopes, roles, etc.). It could be used for both public and confidential clients. You could as well use Postman and https://jwt.io

HTH:)

关于java - KeyCloak 用户验证和获取 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49572291/

44 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com