keycloak - 使用服务帐户访问 Keycloak REST Admin API(客户端凭据授予)
问题描述
我喜欢从我自己的应用程序中管理 keycloak:创建用户和客户端,显示用户和客户端。由于这不是真正的用户,而是一台机器,因此我想使用具有客户端凭据授权的服务帐户,如How to get Keycloak users via REST without admin account中所建议的那样。为了实现这一点,我:
- 创建一个领域
- 在真实里面创建了一个客户端
- 将客户端的访问类型配置为“机密”保存并激活保存后将出现的“启用服务帐户”选项。
请求在标头中使用“用户名:密码”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'
- 尝试使用访问令牌访问用户:
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 区分范围/范围映射和角色管理。
范围选项卡:您在上面的问题中看到的仅管理允许客户端请求的角色。
要使客户端凭据授权起作用,必须在“服务帐户角色”选项卡中将这些角色分配给客户端。
所以最终客户端会收到一个令牌,它是这两个配置的交集。
来源:https ://www.keycloak.org/docs/latest/server_admin/index.html#_service_accounts
推荐阅读
- reactjs - 将 Github 存储库连接到 Heroku 时如何解决此错误
- c - 在 C 中的函数声明中使用宏
- mysql - MySQL游标总是退出循环
- azure - 使用 Azure Pipelines 部署和运行 .exe 文件
- .net - 如何更新获取注册表值的组合框
- azure - 如何在 Azure 的不同位置使用公共 IP 地址和 VM?
- html - 在电子邮件中嵌入 Youtube 视频
- mysql - 建立数据库连接 WordPress 时出错(AWS Linux2、MariaDB、Apache)
- python - 使用 python 应用程序将数据发送到 azure 事件中心
- scala - 使用 gRPC 访问 Gatling feeder 中的变量