2
1

More than 1 year has passed since last update.

IBM Security Verify API + Pythonでユーザー情報一覧を取得する

Last updated at Posted at 2021-08-19

はじめに

以前の記事で、/v2.0/Usersで一度に取得できるユーザー情報の上限が2500件であるとご紹介しました。

IBM Security Verify API ユーザー検索(/v2.0/Users)利用上の注意点について

2500件を超えるユーザーを取得する方法として、javascript / nodejsを使った手法の情報がありました。

javascript / nodejsを使った方法
https://docs.verify.ibm.com/verify/docs/looking-up-users

こちらの概念を参考にPythonでユーザー一覧を取得してみました。

#1.出力結果イメージ

約10000ユーザー登録してエクスポートの確認を行いました。

1列目にユーザー名、2列目にユーザーID(Verify内で採番されているユニーク値)をエクスポートしました。
userlist-python1.png

#2.Pythonのサンプルコード

url/clientid/clientsecretは、環境にあわせて見直しください。

getuser.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import requests
import json

url= "https://<テナント名>.verify.ibm.com"
clientid = "クライアントID"
clientsecret = "クライアント秘密鍵"
block = "2021-01-01T00:00:00Z"


# トークンを取得する
headers = {
    "Accept": "application/json",
    "Content-Type": "application/x-www-form-urlencoded"
}

payload = {
    "grant_type": "client_credentials",
    "scope": "openid",
    "client_id": clientid,
    "client_secret": clientsecret
}

#print(payload)
response = requests.request("POST", url+"/v1.0/endpoint/default/token", data=payload, headers=headers)
#print(response.text)
output = response.json()
access_token = output["access_token"]
print(access_token)
masterlist = []


# ユーザー情報を取得する(2000件)
headers = {
    "Authorization": "Bearer " +access_token
}

#ループ処理判定フラグ
flag = True

while flag:
 response = requests.request("GET", url+"/v2.0/Users?filter="+"meta.created ge \"" + block + "\"&sortBy=meta.created&sortOrder=ascending&count=2000", headers=headers)
 print(url+"/v2.0/Users?filter="+"meta.created ge '" + block + "'&sortBy=meta.created&sortOrder=ascending&count=2000")
 
 #print(response.text)
 output = response.json()

 if output["totalResults"] < 2000:
  print("yes <2000")
  output = output["Resources"]
  #検索結果を配列に設定
  masterlist.extend(output)
  print (len(masterlist))
  flag = False
  
 else:
  print("no >2000")
  output = output["Resources"]

  #配列の最後の2つのmeta.created が等しい場合は、最後の配列を削除する
  while output[len(output)-1]["meta"]["created"] == output[len(output)-2]["meta"]["created"]:
  #末尾の配列を削除する
   output.pop()
  
  #末尾の配列のmeta.createdを変数に指定
  block = output[len(output)-1]["meta"]["created"] 
  print(block)
  output.pop()
  
  #検索結果を配列に設定
  masterlist.extend(output)
  print (len(masterlist))

#結果出力 
for i in masterlist:
 print(i["userName"]+","+i["id"])

#3.IBM Security Verify Developer PortalのAPIリファレンスについて

APIリファレンスページに、cURL/Node/Puby/PHP/Pythonのサンプルコードが公開されています。
https://docs.verify.ibm.com/verify/reference/handletoken

言語を切り替えることで各言語に対応したサンプルコードが表示されます。

userlist-python2.png

#最後に

2500件を超えるユーザー情報を取り扱うためのサンプルコードをご紹介しました。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1