相关疑难解决方法(0)

使用服务帐户访问 Keycloak REST Admin API(客户端凭据授予)

我喜欢从我自己的应用程序管理 keycloak:创建用户和客户端,显示用户和客户端。由于这不是真正的用户,而是一台机器,我想使用具有客户端凭据授权的服务帐户,如如何在没有管理员帐户的情况下通过 REST 获取 Keycloak 用户中所述。为了实现这一点,我:

  1. 创造一个境界
  2. 在真正的内部创建了一个客户端
  3. 将客户端的访问类型配置为“机密”保存并激活保存后将出现的“服务帐户已启用”选项。
  4. 在范围内启用“真实管理”的客户端角色(见截图) 在此处输入图片说明

  5. 请求在标头中编码为“用户名:密码”base64 的访问令牌 curl -X POST 'http://accounts.d10l.de/auth/realms/d10l/protocol/openid-connect/token' \ -H "Content-Type: application/x-www-form-urlencoded" \ -H "Authorization: Basic ZGV2ZWxvcGVyLXBvcnRhbDpmZGRmYzM4Yy05MzAyLTRlZmQtYTM3Yy1lMWFmZGEyMmRhMzc=" \ -d 'grant_type=client_credentials' \ | jq -r '.access_token'

  6. 尝试使用访问令牌访问用户:

curl -I GET 'http://accounts.d10l.de/auth/admin/realms/d10l/users/' \ -H "Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICIxRVdoNENFUjIweDY5SlBCekU4dU9GdXF4R2NVNlVfWmpTNTQ5bmd2QjNjIn0.eyJqdGkiOiI0NDM0ZDFhNS0xZTA5LTQ4MzQtYWI2Yy0zOTk1YmEwMTgxMzAiLCJleHAiOjE1MzY0MzYwMDEsIm5iZiI6MCwiaWF0IjoxNTM2NDM1NzAxLCJpc3MiOiJodHRwOi8vYWNjb3VudHMuZDEwbC5kZS9hdXRoL3JlYWxtcy9kMTBsIiwiYXVkIjoiZGV2ZWxvcGVyLXBvcnRhbCIsInN1YiI6IjliYWI0YWM1LTRiNWMtNGIxOS05ZTc3LWFjOWFmNzlkNzFhZiIsInR5cCI6IkJlYXJlciIsImF6cCI6ImRldmVsb3Blci1wb3J0YWwiLCJhdXRoX3RpbWUiOjAsInNlc3Npb25fc3RhdGUiOiIyOWM2YWI3Mi05N2RiLTQ2NWUtYTE1Yy03ZWE5NzA0NmZlYzQiLCJhY3IiOiIxIiwiYWxsb3dlZC1vcmlnaW5zIjpbXSwicmVzb3VyY2VfYWNjZXNzIjp7fSwic2NvcGUiOiJlbWFpbCBwcm9maWxlIiwiY2xpZW50SWQiOiJkZXZlbG9wZXItcG9ydGFsIiwiY2xpZW50SG9zdCI6IjE3Mi4xNy4wLjEiLCJlbWFpbF92ZXJpZmllZCI6ZmFsc2UsInByZWZlcnJlZF91c2VybmFtZSI6InNlcnZpY2UtYWNjb3VudC1kZXZlbG9wZXItcG9ydGFsIiwiY2xpZW50QWRkcmVzcyI6IjE3Mi4xNy4wLjEiLCJlbWFpbCI6InNlcnZpY2UtYWNjb3VudC1kZXZlbG9wZXItcG9ydGFsQHBsYWNlaG9sZGVyLm9yZyJ9.D_XnpF1rwCayup8h4UXM4AGWkY_xQo40X-yIlWhmqaxkVh1FQy24932VDRCAmxYHcrwazRMqO7snXmre3_8YF5R9Dt8GYjiBorECvQ9X_nBwunmHqnGxIeE64c2GXiz6zSjdgQJQE8fH10NsLyFWHQ-lBPsBwZBsrkKQ5QUEU2qjE7rDRPtYLJPB94BSE4QGfedmRIbvg39snVkClBDUmuBTq_Rc4p7kV69h0a2Mb1sgEr3MdB4RcsOe3gJPZVVtu7gZuGqcAQKMYgtybArF3OXz37w8hjUp6FABxDcvY7K-jsGxXn0hSU0OB7wxAWY9vP4ar4tQYlKxNjs46rPLWw"

但响应是 403:

url: (6) Could not resolve host: GET HTTP/1.1 403 Forbidden content-length: 0 date: Sat, 08 Sep 2018 19:42:06 GMT

如何/是否可以通过客户端凭据授权从新服务帐户访问 Admin REST API?

keycloak keycloak-services

12
推荐指数
1
解决办法
2万
查看次数

如何使用keycloak和spring读取所有用户?

我正在使用keycloak 3.4spring boot开发一个网络应用程序.我正在使用Active Directory作为用户Federeation来检索所有用户信息.

但是要在我的网络应用程序中使用这些信息,我想我必须将它们保存在"local-webapp"数据库​​中.

因此,在用户登录后,如何将其保存在我的数据库中?

我正在考虑这样的场景:"我有一个对象A,它引用了用户B,因此我必须在它们之间建立关系.所以我添加了一个外键."

在这种情况下,我需要让我的数据库上的用户.没有?

编辑

为了避免保存我的数据库上的所有用户,我正在尝试使用管理员API,因此我在控制器中添加了以下代码.

我还创建了另一个调用Test所有用户的客户端,这样我可以使用client-idclient-secret.或者有没有办法JWT使用admin api?

客户端:

     Keycloak keycloak2 = KeycloakBuilder.builder()
                         .serverUrl("http://localhost:8080/auth/admin/realms/MYREALM/users")
                         .realm("MYREALMM")
                         .username("u.user")
                         .password("password")
                         .clientId("Test")
                         .clientSecret("cade3034-6ee1-4b18-8627-2df9a315cf3d")
                         .resteasyClient(new ResteasyClientBuilder().connectionPoolSize(20).build())
                         .build();

 RealmRepresentation realm2 = keycloak2.realm("MYREALMM").toRepresentation();
Run Code Online (Sandbox Code Playgroud)

错误是:

2018-02-05 12:33:06.638 ERROR 16975 --- [nio-8080-exec-7] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Handler dispatch failed; nested exception is java.lang.Error: Unresolved compilation problem: 
    The method realm(String) is undefined for …
Run Code Online (Sandbox Code Playgroud)

spring authorization spring-security spring-boot keycloak

8
推荐指数
2
解决办法
8976
查看次数

Keycloak客户端凭证流程澄清

我正在使用Keycloak服务器来实现SSO.我能够使用client_credentials流获取特定客户端的访问令牌.

然而,我的观察是,访问令牌被授予内部服务帐户的的客户端.我想获得访问令牌其他用户存在的领域通过提供一些额外的参数令牌端点.

以下是我使用Postman Chrome扩展程序令牌端点发出当前请求:

POST http://localhost:8080/auth/realms/<realm>/protocol/<protocol>/token

x-www-form-urlencoded

grant_type        client_credentials
client_id         <client_id>
client_secret     <client_secret>
Run Code Online (Sandbox Code Playgroud)

如果可能,请告诉我.此外,我想传达一下,这对Keycloakopenid-connect协议来说是全新的.

openid-connect keycloak

7
推荐指数
1
解决办法
9391
查看次数

KeyCloak用户验证和获取令牌

首先,我对Keycloak非常陌生,请问如果我要问的问题可能是错的。

我已经安装了Keycloak服务器,并且可以使用以下命令访问Web UI:

http:// localhost:8008 / auth

我的要求是通过将领域用户传递给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)

谁能指导我?

java keycloak keycloak-services

7
推荐指数
2
解决办法
8269
查看次数

KEYCLOAK:仅通过“用户名”获取访问令牌(无密码)

我有一个关于 Keycloak 和获取访问令牌的问题。

我们的设置如下: · 用户在 Keycloak 中创建和维护 · 资源、策略和权限也在 Keycloak 中维护

我们的用例是

作为第三方应用程序,我想通过只向 Keycloak 提供用户名来获取特定用户的授权信息(例如基于资源和范围的权限),以便我可以允许或禁止进一步的操作。

更具体地说:在我们的应用程序中,需要根据访问令牌验证对其他服务的每个请求。但我们只有用户名。

现在的问题是:

>我们如何通过只知道用户名来获取用户的访问令牌?

> 有没有办法为这样的用户获取访问令牌?

keycloak

6
推荐指数
1
解决办法
7335
查看次数

如何在没有管理员角色的情况下通过 REST 获取 Keycloak 用户信息

我使用keycloak作为授权服务器。用户将自己的用户名/密码发送到MyWebAppMyWebApp获取grant_type: password令牌,然后将令牌响应给用户。现在我希望我的用户能够获取他们的信息,更改他们的密码以及与他们自己相关的一切RESTFUL。当我发送休息请求以/{realm}/users/{id}获取用户信息时,keycloak 收到 403 错误响应。如何在没有 keyclaok 管理员访问权限的情况下获取用户信息?

注意:我已经看到这个问题,但我也想给用户编辑个人资料。

keycloak keycloak-services

5
推荐指数
1
解决办法
2万
查看次数