首先,我对keycloak很新,请原谅我,如果我问的不对劲。
我已经安装了keycloak服务器,我可以使用以下方式访问web ui:
我的要求是通过将关键用户传递给keycloak api并从响应中获取令牌来验证它,然后将此令牌传递给我的其他web api调用。
但是,我无法找到一个如何做到这一点的简单指南? 任何人都可以帮助我。
更新:
使用KEYCLOCK中的UI:
到目前为止
我可以创建一个关系: 例如:DemoRelam
根据Relam,我创建了客户端: 例如:DemoClient
在我创建用户的客户端下: 例如: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指南:
http://www.keycloak.org/docs-api/3.0/rest-api/index.html#_users_resource
在本指南中,它提到我可以使用相关的用户 获取用户返回根据查询参数过滤的用户列表
GET /admin/realms/{realm}/users
但是,当我使用POSTMAN获取用户时,我收到403错误代码。我传递相同的令牌作为我在前面步骤中获得的身份验证。
http://localhost:8080/auth/admin/realms/DemoRelam/users
任何人都可以指导我。
答案 0 :(得分:0)
keycloak中的用户是特定于领域的,并非每个用户都可以访问它们。在管理控制台中为用户分配特定角色后,您将能够通过admin API获得所有用户。只需
用户> myuser>角色映射>客户角色>领域管理
为用户分配两个角色manage-users
或view-users
中的任何一个。
生成新令牌。
使用新令牌访问API
您将拥有您的用户
P.s我认为您应该将问题标题更新为更相关的内容。
答案 1 :(得分:0)
您有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'`
4)最终调用Admin REST API users endpoint:
curl -X GET -H "Authorization: Bearer $ACCESS_TOKEN" $KCHOST/auth/admin/realms/$REALM/users | jq
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'`
4)调用REST API端点:
curl -X GET -H "Authorization: Bearer $ACCESS_TOKEN" $KCHOST/auth/admin/realms/$REALM/users | jq
P.S。为了进行调试,我刚刚编写了一个名为brauzie的CLI工具, 可以帮助您获取和分析JWT令牌(作用域,角色等)。它可能 适用于公共和机密客户。你也可以 使用Postman和https://jwt.io
HTH:)