【问题标题】:KeyCloak User validation and getting tokenKeyCloak 用户验证和获取令牌
【发布时间】:2018-09-09 08:51:32
【问题描述】:

首先,我对 Keycloak 很陌生,如果我问的问题可能有问题,请原谅。

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

http://localhost:8008/auth

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

但我无法找到一个简单的指南来说明如何做到这一点......

更新:


使用来自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"
}

作为回应,我得到了令牌。

{
    "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

有人可以指导我吗?

【问题讨论】:

  • 你的意思是你刚刚安装了keycloak并在它没有与我们的应用程序集成时运行它?如果您会在 Internet 和 keycloak 文档中看到太多可用的东西,如何将 keycloak 与 Web 应用程序集成
  • @SubodhJoshi 我不想将 keycloak 与 Web 应用程序集成。我将在 relam 下传递用户/客户端并获取令牌并将此令牌传递给其他一些 api,我将再次验证此令牌
  • 使用 ui 可能无法使用 keycloak rest api 或 admin-cli。
  • @SubodhJoshi 我已经用我到目前为止所取得的成就更新了我的问题,你能帮帮我吗。
  • 我认为这会对您有所帮助。已获得访问令牌,但不知道如何使用邮递员进行测试。 > 您应该只需要在 Postman 中添加授权标头,获得访问令牌但不知道如何使用 postman 进行测试。 > 你应该只需要在 Postman 中添加授权标头,stackoverflow.com/questions/24709944/… 我发现这个看看它是否对你有帮助,否则我只能在早上写正确的答案我现在正在使用我的手机发表评论。

标签: java keycloak keycloak-services


【解决方案1】:

keycloak 中的用户是特定于领域的,并不是每个用户都可以访问它们。在管理仪表板中为用户分配特定角色后,您将能够通过管理 API 获取所有用户。简单的做

  1. 在管理仪表板中,转到

用户 > myuser > 角色映射 > 客户端角色 > 领域管理

  1. 为用户分配manage-usersview-users 这两个角色中的任意一个。

  2. 生成新令牌。

  3. 使用新令牌命中 API

你将拥有你的用户

P.s 我认为您应该将问题标题更新为更相关的内容。

【讨论】:

    【解决方案2】:

    您有 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
    

    附:为了调试,我刚刚编写了一个名为brauzie 的 CLI 工具 将帮助您获取和分析您的 JWT 令牌(范围、角色等)。它可能 可用于公共和机密客户。你也可以 使用邮递员和https://jwt.io

    HTH :)

    【讨论】:

    • 这在 Keycloak 12 中有所改变吗?我似乎找不到Service account roles 标签?
    猜你喜欢
    • 1970-01-01
    • 2021-08-12
    • 2018-06-24
    • 2021-05-02
    • 1970-01-01
    • 2017-07-13
    • 2023-04-06
    • 2017-10-21
    • 2015-11-14
    相关资源
    最近更新 更多