在 Keycloak 中以编程方式创建客户端

Posted

技术标签:

【中文标题】在 Keycloak 中以编程方式创建客户端【英文标题】:Create Client programmatically in Keycloak 【发布时间】:2018-09-08 04:07:44 【问题描述】:

如何使用 java 应用程序在 keycloak 中以编程方式创建客户端?

【问题讨论】:

【参考方案1】:

一种方法是通过 api:

获取有权将客户端添加到领域的帐户的令牌

  POST https://<keycloak-url>/auth/realms/master/protocol/openid-connect/token
  Host: <keycloak-url>
  Content-Type: application/x-www-form-urlencoded
  Cache-Control: no-cache

  client_id=admin-cli&grant_type=password&username=<user>&password=<password>

添加新客户端(请求正文来自现有客户端的导出)

  POST https://keycloak-url/auth/admin/realms/<realm-name>/clients
  Host: <keycloak-url>
  Content-Type: application/json
  Cache-Control: no-cache
  Authorization: Bearer <token>

  
       "clientId": "test-add",
       "[...]"
   

响应状态应该是201,带有新客户端的标头位置。

文档可以在这里找到:https://www.keycloak.org/docs-api/14.0/rest-api/index.html#_clients_resource

【讨论】:

如果有人正在寻找最新的链接,可以在这里找到:https://www.keycloak.org/docs-api/14.0/rest-api/index.html#_clients_resource @sandy.sk 谢谢,我会更新答案【参考方案2】:

我是这样做的,

public boolean createClient(String clientId, String realmName) throws IOException 
    try 
        Keycloak keycloakInstanceDefault = KeycloakInstance.getInstance();
        RealmResource createdRealmResource = keycloakInstanceDefault.realms().realm(realmName);
        ClientRepresentation clientRepresentation = new ClientRepresentation();
        clientRepresentation.setClientId(clientId);
        clientRepresentation.setProtocol("openid-connect");
        clientRepresentation.setSecret(clientId);
        createdRealmResource.clients().create(clientRepresentation);

     catch (IOException e) 
        e.printStackTrace();
        return false;
    

    return true;

KeycloakInstance.getInstance();返回 Keycloak 对象。

【讨论】:

【参考方案3】:

使用卷曲

#get token
RESULT=`curl --data "username=<your_admin_user>&password=<your_passwod>&grant_type=password&client_id=admin-cli" http://localhost:8090/auth/realms/master/protocol/openid-connect/token
TOKEN=`echo $RESULT | sed 's/.*access_token":"//g' | sed 's/".*//g'`
#create user
curl -X POST -d ' "clientId": "myclient" ' -H "Content-Type:application/json" -H "Authorization: bearer $TOKEN" http://localhost:8090/auth/realms/master/clients-registrations/default

【讨论】:

以上是关于在 Keycloak 中以编程方式创建客户端的主要内容,如果未能解决你的问题,请参考以下文章

如何在不使用 rest admin api 的情况下以编程方式(java)更新 keycloak 的用户详细信息?

服务器端使用 Bearer 令牌以编程方式在 Java 中验证 Keycloak 用户

使用 Keycloak API 以编程方式将角色分配给组

以编程方式创建 WCF REST 客户端代理(在 C# 中)

Magento:如何在客户集合中以编程方式搜索

如何在android中以编程方式启用位置访问?