ssl - 无法通过 Python 在 Keycloak 中创建 usr
问题描述
我正在尝试创建一个简单的类来包装 Keycloak REST API(比如说创建一个用户),它在使用时工作正常,curl
但在使用 Python Requests 库时不起作用。它可以很好地获取令牌,但是在尝试访问 createUser 端点时出现 400“unknown_error”。我最初的想法是这与我在 requests.post 中关闭 SSL 验证有关,但我不确定。谢谢!
这是成功的shell脚本:
#!/bin/bash
TOKEN=$(curl --location --request POST 'https://www.<KEYCLOAK_SERVER>.com/auth/realms/kaizo/protocol/openid-connect/token' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'grant_type=client_credentials' \
--data-urlencode 'client_id=admin-cli' \
--data-urlencode 'client_secret=<SECRET>')
ACCESS_TOKEN=$(echo $TOKEN | jq -j '.access_token')
RESPONSE=$(curl --location --request POST 'https://www.titancloak.com/auth/admin/realms/kaizo/users' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer '${ACCESS_TOKEN} \
--data-raw '{"firstName":"Bloodhound", "lastName":"Gang", "email":"u2jds7d@ase.edu", "username":"tra.la.la"}')
echo $RESPONSE
这是不起作用的 Python 代码。
#!/usr/bin/python3
import requests
BASE_URL = "https://www.<KEYCLOAK_SERVER>.com"
def get_token():
url = BASE_URL + "/auth/realms/kaizo/protocol/openid-connect/token"
data = {
"grant_type": "client_credentials",
"client_id": "admin-cli",
"client_secret": "<SECRET>"
}
response = requests.post(
url,
data,
verify=False
).json()
return response.get('access_token')
def create_user(token: str):
url = BASE_URL + "/auth/admin/realms/kaizo/users"
data = {
"firstName":"jon",
"lastName":"Snow",
"email":"mkm29@case.edu",
"username":"jon.snow"
}
headers = {
"Authorization": f"Bearer {token}",
"Content-Type": "application/json",
'Accept': 'application/json'
}
response = requests.post(
url,
data=data,
verify=False,
headers=headers
) # cert=("/Users/mitchellmurphy/Developer/ans/flaskql/app/authentication/titancloak.crt")
return response
if __name__ == '__main__':
token = get_token()
print(token[:25])
user = create_user(token)
print('Response[%s]: %s ' % (user.status_code, user.json()))
解决方案
解决方案是更改发送到 Keyloak 的数据格式,如下所示:data=json.dumps(data)
推荐阅读
- python - 是否可以使用 SkPy 在 Python 中更改 Skype 群聊的群组图标?
- python - 不断收到烧瓶错误GET html 404
- docusignapi - getUsers 的 API 响应不完整
- node.js - 尝试使用 puppeteer 获取一些数据 ny post 请求
- excel - 如何使用 ISNUMBER 和 SEARCH 或任何其他函数在 excel 中编码 OTHERS 响应?
- swift - 将 Collection View Header 固定在 Collection View 的底部,除了扩展的 header
- java - Harmony OS 中 1px 相对于 fp 是多少?
- arrays - 使用 Talend 从包含数组的 MongoDB 读取数据
- javascript - 按未知键的值对对象数组进行排序
- android - ADB 命令以 HH:MM:SS.SSSS 显示时间格式