python-3.x - 通过 REST API 创建 Keycloak 客户端

标签 python-3.x keycloak keycloak-services

我正在尝试使用 Python 通过 Admin REST API 创建 Keycloak 客户端。

我尝试了以下方法:

import requests
import argparse
import ast

def get_token():

    url = 'http://localhost:9003/auth/realms/master/protocol/openid-connect/token'

    params = {

        'client_id': 'admin-cli',
        'grant_type': 'password',
        'username' : 'admin',
        'password': 'password'
    }

    return ast.literal_eval(requests.post(url, params, verify=False).content.decode("utf-8"))['access_token']
    #return requests.post(url, params, verify=False).content.decode('utf-8')

def create_client():

    url ='http://localhost:9003/auth/admin/realms/master/clients'

    headers = {
                'content-type': 'application/json',
                'Authorization' : 'bearer '+ str(get_token)
                }

    params = {
                                "clientId":"testclient-3",
                                #"id":"3",
                                #"name": "testclient-3",
                                #"description": "TESTCLIENT-3",
                                #"enabled": True,
                                #"redirectUris":[ "\\" ],
                                #"publicClient": True


            }

    return requests.post(url, headers, params, verify=False)

x = create_client()
print (x)

我收到 401 HTTP 代码,谁能帮我解决这个问题?

提前谢谢你。

PS:9003映射到8080(我用的是Keycloak docker容器)

最佳答案

我已经做到了,这样:

import requests
import argparse
import ast

def get_token():

    url = 'http://localhost:9003/auth/realms/master/protocol/openid-connect/token'

    params = {

        'client_id': 'admin-cli',
        'grant_type': 'password',
        'username' : 'admin',
        'password': 'password'
    }
    x = requests.post(url, params, verify=False).content.decode('utf-8')
    print (x)
    print ('\n')
    return ast.literal_eval(x)['access_token']
    #return requests.post(url, params, verify=False).content.decode('utf-8')

def create_client():

          url ='http://localhost:9003/auth/admin/realms/master/clients'

          headers = {
                'content-type': 'application/json',
                'Authorization' : 'Bearer '+ str(get_token())
                }

          params = {
                                "clientId" : "testclient",
                                "id":"3",
                                "name": "testclient-3",
                                "description": "TESTCLIENT-3",
                                "enabled": True,
                                "redirectUris":[ "\\" ],
                                "publicClient": True


            }
           x = requests.post(url, headers=headers, json=params)
           print (x)
           return x.content

关于python-3.x - 通过 REST API 创建 Keycloak 客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58604520/

相关文章:

python - 从同一文件夹中的文件导入功能

Python sqlite3 如果 executemany() 中途遇到完整性错误会怎样?

python-3.x - 我们如何添加具有相同 id 的数据框?

Keycloak用户管理

keycloak - 哪些角色使 Keycloak 领域中的用户能够使用 Admin-REST-API?

keycloak - 为什么 'id'在 key 斗篷中称为 'sub'?

permissions - 如何在Keycloak中授予某些用户部分用户管理权限?

python - 3.3 和 3.5 中的类型提示有什么区别?

ldap - Keycloak LDAP 集成 : using of Custom User LDAP Filter to filter by group

java - 如何在 KeyCloak 中分配复合角色