概要
以下の Auth0 Python SDK を触ってみた。という内容になります。
auth0-python
最低限「触れる」ようになるために、認証情報の設定と簡単な情報取得(ユーザー情報など)をやってみます。
必要な認証情報について
以降で紹介するソースコードを実行するために、以下が必要になります。
- ドメイン名
- クライアントID
- クライアントシークレット
以下のように Auth0 管理画面から取得可能です。
サンプルソースコードと実行結果
本記事のために用意したサンプルソースコードが以下になります。
先ほど取得したドメイン名などを記載します。
※本来機密情報となるため、本番利用時はソースコード内に認証情報を記載するのはお控えください
import json from auth0.v3.authentication import GetToken from auth0.v3.management import Auth0 class SampleClass(): def __init__(self): self.domain = '[ドメイン名]' self.client_id = '[クライアントID]' self.client_secret = '[クライアントシークレット]' def main(self): self.auth0_client = self.get_auth0() self.print_users() self.print_roles() self.print_assigned_users() def get_auth0(self): get_token = GetToken(self.domain) access_token = get_token.client_credentials( self.client_id, self.client_secret, f'https://{self.domain}/api/v2/' )['access_token'] return Auth0(self.domain, access_token) def print_users(self) -> None: response = self.auth0_client.users.list(page=0, per_page=1) print('\n'.join([ '# Auth0().users.list() のレスポンス', f'{json.dumps(response, indent=4)}', '', ])) def print_roles(self) -> None: response = self.auth0_client.roles.list(page=0, per_page=1) print('\n'.join([ '# Auth0().roles.list() のレスポンス', f'{json.dumps(response, indent=4)}', '', ])) def print_assigned_users(self) -> None: role_id = 'rol_xxxx' # 適当なロールの ID を指定 response = self.auth0_client.roles.list_users(page=0, per_page=1, id=role_id) print('\n'.join([ f'# Auth0().roles.list_users(id="{role_id}") のレスポンス', f'{json.dumps(response, indent=4)}', '', ])) def main(): SampleClass().main() main()
本ソースコードを実行すると、以下のように出力されました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
# Auth0().users.list() のレスポンス { "start": 0, "limit": 1, "length": 1, "users": [ { "created_at": "2021-06-22T01:50:26.950Z", "email": "xxxx@skyarch.net", "email_verified": true, "family_name": "xxxx", "given_name": "xxxx", "identities": [ { "provider": "google-oauth2", "access_token": "xxxx", "expires_in": 3599, "user_id": "xxxx", "connection": "google-oauth2", "isSocial": true } ], "locale": "ja", "name": "xxxx", "nickname": "xxxx", "picture": "https://lh3.googleusercontent.com/xxxx", "updated_at": "2023-03-17T06:48:33.592Z", "user_id": "google-oauth2|xxxx", "multifactor": [ "guardian" ], "multifactor_last_modified": "2022-06-20T09:12:33.854Z", "last_login": "2023-03-17T06:48:33.592Z", "last_ip": "xxxx", "logins_count": 170 } ], "total": 13 } # Auth0().roles.list() のレスポンス { "roles": [ { "id": "rol_xxxx", "name": "Role", "description": "Role" } ], "start": 0, "limit": 1, "total": 12 } # Auth0().roles.list_users(id="rol_xxxx") のレスポンス { "users": [ { "user_id": "auth0|xxxx", "email": "xxxx@skyarch.net", "picture": "https://s.gravatar.com/avatar/xxxx", "name": "xxxx@skyarch.net" } ], "start": 0, "limit": 1, "total": 4 } |
ソースコードの詳細説明
認証情報の設定
Auth0 の認証情報を設定しているのが以下の部分です。
クライアントシークレットなどを渡して auth0_client オブジェクトを取得しています。
class SampleClass(): def __init__(self): self.domain = '[ドメイン名]' self.client_id = '[クライアントID]' self.client_secret = '[クライアントシークレット]' def main(self): self.auth0_client = self.get_auth0() .... def get_auth0(self): get_token = GetToken(self.domain) access_token = get_token.client_credentials( self.client_id, self.client_secret, f'https://{self.domain}/api/v2/' )['access_token'] return Auth0(self.domain, access_token)
各種APIの実行
以下の部分で、ユーザーの一覧を取得しています。
def print_users(self) -> None: response = self.auth0_client.users.list(page=0, per_page=1) print('\n'.join([ '# Auth0().users.list() のレスポンス', f'{json.dumps(response, indent=4)}', '', ]))
レスポンスは以下の通りです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
# Auth0().users.list() のレスポンス { "start": 0, "limit": 1, "length": 1, "users": [ { "created_at": "2021-06-22T01:50:26.950Z", "email": "xxxx@skyarch.net", "email_verified": true, "family_name": "xxxx", "given_name": "xxxx", "identities": [ { "provider": "google-oauth2", "access_token": "xxxx", "expires_in": 3599, "user_id": "xxxx", "connection": "google-oauth2", "isSocial": true } ], "locale": "ja", "name": "xxxx", "nickname": "xxxx", "picture": "https://lh3.googleusercontent.com/xxxx", "updated_at": "2023-03-17T06:48:33.592Z", "user_id": "google-oauth2|xxxx", "multifactor": [ "guardian" ], "multifactor_last_modified": "2022-06-20T09:12:33.854Z", "last_login": "2023-03-17T06:48:33.592Z", "last_ip": "xxxx", "logins_count": 170 } ], "total": 13 } |
以下の部分で、ロールの一覧を取得しています。
def print_roles(self) -> None: response = self.auth0_client.roles.list(page=0, per_page=1) print('\n'.join([ '# Auth0().roles.list() のレスポンス', f'{json.dumps(response, indent=4)}', '', ]))
レスポンスは以下の通りです。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# Auth0().roles.list() のレスポンス { "roles": [ { "id": "rol_xxxx", "name": "Role", "description": "Role" } ], "start": 0, "limit": 1, "total": 12 } |
以下の部分で、あるロールにひもづくユーザーの一覧を取得しています。
def print_assigned_users(self) -> None: role_id = 'rol_xxxx' # 適当なロールの ID を指定 response = self.auth0_client.roles.list_users(page=0, per_page=1, id=role_id) print('\n'.join([ f'# Auth0().roles.list_users(id="{role_id}") のレスポンス', f'{json.dumps(response, indent=4)}', '', ]))
レスポンスは以下の通りです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# Auth0().roles.list_users(id="rol_xxxx") のレスポンス { "users": [ { "user_id": "auth0|xxxx", "email": "xxxx@skyarch.net", "picture": "https://s.gravatar.com/avatar/xxxx", "name": "xxxx@skyarch.net" } ], "start": 0, "limit": 1, "total": 4 } |
最後に
今回は Auth0 Python SDK を「触ってみた」ということで、
まずは最低限 認証情報を設定してAPIを実行してみる部分まで実施してみました。
Auth0 Python SDK を使って何かを自動化したいけど
とっかかりが無くて困っている、という方の助けになれれば幸いです。
投稿者プロフィール
- 2015年8月入社。弊社はインフラ屋ですが、アプリも作ってみたいです。