无法使用Keycloak REST API创建角色

时间:2020-07-10 06:00:56

标签: keycloak keycloak-rest-api

我正在尝试在Keycloak的领域中添加角色,但这给了我错误的请求响应。我的步骤:

  1. 使用以下方法获取令牌:
 curl -X POST "http://localhost:8180/auth/realms/master/protocol/openid-connect/token" \                                                                 
 -H 'Content-Type: application/x-www-form-urlencoded' \
 -d 'username=admin&password=admin&grant_type=password&client_id=admin-cli'
  1. 使用以下方法获取客户端ID:
curl -X GET http://localhost:8180/auth/admin/realms/my-realm/clients?clientId=my-client \
 -H "Authorization: Bearer "$access_token \
 -H 'cache-control: no-cache'
  1. 尝试使用[文档] [1]添加角色:
curl -v http://localhost:8180/auth/admin/realms/my-realm/clients/[ID-from-above]/roles \
 -H "Content-Type: application.json" \
 -H "Authorization: Bearer "$access_token --data '{"name":"test-role"}'

发出最后一条命令时,我得到了错误的请求响应。我究竟做错了什么?谢谢。

https://www.keycloak.org/docs-api/5.0/rest-api/index.html#_roles_resource

2 个答案:

答案 0 :(得分:3)

您似乎很近。

我能够通过遵循REST API来创建领域级别的角色:

enter image description here

此呼叫与您的呼叫之间的区别在于,您试图充当客户端级别的角色。您对客户端级别的角色是否有特定要求,或者只是在尝试?

如果领域级别的角色满足您的要求,则可以使用上述API。

还请检查this post,以确保您已正确按照步骤设置了admin Rest API。

答案 1 :(得分:1)

您应该从要访问的客户端获取带有客户端密钥的令牌。

token=$(
  curl -X POST "http://localhost:8180/auth/realms/master/protocol/openid-connect/token" \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  -d 'username=[USER]&password=[PASSWORD]&grant_type=password&client_id=admin-cli&client_secret=[CLIENT_SECRET]' \
  | jq -r '.access_token'
)

clientID=$(
  curl -X GET "http://localhost:8180/auth/admin/realms/vertical/clients?clientId=[CLIENT_NAME]" \
  -H "Authorization: Bearer "${token} \
  -H 'cache-control: no-cache' | jq -r '.[].id'
)

尝试使用“ application / json”而不是“ application.json”。 授权标头中的引号应包含令牌。

不要忘记最后一个curl命令中的-X POST:)

curl -X POST "http://localhost:8180/auth/admin/realms/[REALM]/clients/${clientID}/roles" \
 -H "Content-Type: application/json" \
 -H "Authorization: Bearer ${token}" \
 -d '{"name": "test-role"}'