Zscaler api 使用 Python 进行身份验证

问题描述

我正在尝试使用 API 对 zscaler 进行身份验证。通过阅读文档并遵循以下站点中的示例

我写了以下代码

import time
import http.client
import json


def obfuscate_api_key():
    seed = 'myActualKey'
    time_Now = int(time.time() * 1000)
    n = str(time_Now)[-6:]
    r = str(int(n) >> 1).zfill(6)
    obf_key = ""
    for i in range(0,len(str(n)),1):
        obf_key += seed[int(str(n)[i])]
    for j in range(0,len(str(r)),1):
        obf_key += seed[int(str(r)[j]) + 2]

    return time_Now,obf_key


Now,key = obfuscate_api_key()

conn = http.client.HTTPSConnection('zsapi.zscalertwo.net')

payload = {"username": "my@username.com","password":"mypassword","apiKey": key,"timestamp": Now}

headers = {
    'content-type': "application/json",'cache-control': "no-cache"
}

conn.request("POST","/api/v1/authenticatedSession",json.dumps(payload),headers)

res = conn.getresponse()
data = res.read()

print(data.decode("utf-8"))

但是,我不断收到以下消息:

{"code":"AUTHENTICATION_Failed","message":"AUTHENTICATION_Failed"}

我的凭据是正确的,因为我使用它们在 Web GUI 中进行身份验证。我有使用 api 的必要特权,因为我有一个 api 密钥。主机名也是正确的,这就是我用来从浏览器登录的。我也试过 admin.zscalertwo.net 但结果是一样的。 任何可能导致此问题的想法都将受到欢迎。谢谢!

解决方法

您可能已经解决了这个问题,但请添加更多信息以防有人遇到此问题。

您的代码没有任何问题 - 使用有效凭据可以正常工作。

返回 AUTHENTICATION_FAILED 的三个条件,它们是:

  • 用户名不正确
  • 密码错误
  • Zscaler 云 URL 不正确

不正确的用户名格式将返回:

{"code":"INVALID_USERNAME_OR_PASSWORD","message":"INVALID_USERNAME_OR_PASSWORD"}

将返回不正确的 API 密钥或时间戳:

{"code":"INVALID_API_KEY","message":"INVALID_API_KEY"}

我建议您查看 pyZscaler(我是作者),这是一个适用于 Zscaler API 的 Python SDK,您可能会发现它很有用。