首页 > 解决方案 > 检索 Auth0 用户信息

问题描述

我正在尝试构建一个 python 脚本来访问我的 auth0 门户上所有用户的电子邮件和最后登录时间数据。我应该如何处理这个?这是我到目前为止的代码

import sys
sys.path.append("D:\home\site\wwwroot\env\Lib\site-packages")

import quickbase
import urllib2
import pypyodbc
import timestring
import datetime
import time
import math
import sys
import locale
import smtplib
import pypyodbc
import httplib
import json
import urllib
import urllib2

from dateutil.relativedelta import relativedelta

#Activate Webhook with Campaign is added or modified.
#0.1 establish connection to SQL server
connection = pypyodbc.connect('Driver={SQL Server Native Client 11.0};'
'Server=tcp:xxxxe.database.windows.net,1433;'
'Database=LQDC;'
'uid=Admin@lxx;pwd=xxxx')
cursor = connection.cursor()

#0.2 establish connection to Auth0
def main():

#Configuration Values
AUDIENCE = "https://xxe.auth0.com/api/v2/"
DOMAIN = "lxxx.auth0.com"
CLIENT_ID = "xxxxxL"
CLIENT_SECRET = "xxxxxxr"
GRANT_TYPE = "client_credentials" # OAuth 2.0 flow to use

#Get an Access Token from Auth0
base_url = "https://{domain}".format(domain=DOMAIN)
data = urllib.urlencode([('client_id', CLIENT_ID),
('client_secret', CLIENT_SECRET),
('audience', AUDIENCE),
('grant_type', GRANT_TYPE)])
req = urllib2.Request(base_url + "/oauth/token", data)
response = urllib2.urlopen(req)
oauth = json.loads(response.read())
access_token = oauth['access_token']

#Get all Applications using the token
req = urllib2.Request(base_url + "/api/v2/clients")
req.add_header('Authorization', 'Bearer ' + access_token)
req.add_header('Content-Type', 'application/json')

try:
response = urllib2.urlopen(req)
res = json.loads(response.read())
print res

conn = httplib.HTTPSConnection(DOMAIN)
payload = "{\"connection_id\":\"not sure which API/token/code to put here\",\"format\": \"csv\", \"limit\": 4, \"fields\": [{ \"name\": \"email\"},{\"name\": \"last_ip\"}, { \"name\": \"created_at\"}, { \"name\": \"last_login\"}]}"
headers = {
    'authorization': "Bearer "+access_token,
    'content-type': "application/json"
    }
conn.request("POST", "/xxxx.auth0.com/api/v2/jobs/users-exports", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
except urllib2.HTTPError, e:
print 'HTTPError = ' + str(e.code) + ' ' + str(e.reason)
except urllib2.URLError, e:
print 'URLError = ' + str(e.reason)
except urllib2.HTTPException, e:
print 'HTTPException'
except Exception:
print 'Generic Exception'

#Standard boilerplate to call the main() function.
if name == 'main':
main()


第一部分工作正常,第二部分返回下面的错误,我试图让它返回一个包含所有用户信息的 csv 文件,并用它自动填充数据库。

还在这里找到了一些有用的链接,我尝试将它们合并到我的代码中: https ://auth0.com/docs/users/guides/bulk-user-exports

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Error</title>
</head>
<body>
<pre>Cannot POST /lqdfinance.auth0.com/api/v2/jobs/users-exports</pre>
</body>
</html>

标签: pythonsqlauth0

解决方案


正如我所看到的,您的代码,您需要一个连接 ID,以便您可以使用

base_url + '/api/v2/connections'

获取您的连接 ID 接下来,您需要修改有效负载正文,如下所示

{
  "connection_id": "your_id_as_above",
  "format": "csv",
  "limit": 5,
  "fields": [
      {
        "name": "user_id"
      },
      {
        "name": "name"
      },
      {
        "name": "email"
      },
      {
        "name": "identities[0].connection",
        "export_as": "provider"
      },
      {
        "name": "user_metadata.some_field"
      }
    ]
}

为了测试您的响应数据,我建议您使用 Postman 测试您的 api 有效负载和响应,因为它可以让您更清楚地了解请求的工作方式。


推荐阅读