【问题标题】:Can't create Role using Keycloak REST API无法使用 Keycloak REST API 创建角色
【发布时间】:2020-10-30 19:59:53
【问题描述】:

我正在尝试在 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

【问题讨论】:

    标签: keycloak keycloak-rest-api


    【解决方案1】:

    你似乎很接近。

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

    这与您的电话之间的区别在于您正在尝试担任客户级别的角色。您是否对客户级别的角色有特定要求,或者您只是在尝试?

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

    同时检查 this post 以确保您已正确按照步骤设置管理员 Rest API。

    【讨论】:

      【解决方案2】:

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

      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”。 Authorization 标头中的引号应包含令牌。

      不要忘记上一个 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"}'
      

      【讨论】:

        猜你喜欢
        • 2019-12-07
        • 1970-01-01
        • 2018-07-05
        • 2021-09-06
        • 2020-04-17
        • 2019-05-05
        • 2021-05-03
        • 2019-08-08
        • 1970-01-01
        相关资源
        最近更新 更多