Auth0 Python SDK を触ってみた

概要

以下の 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()

本ソースコードを実行すると、以下のように出力されました。

ソースコードの詳細説明

認証情報の設定

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)}',
            '',
        ]))

レスポンスは以下の通りです。

以下の部分で、ロールの一覧を取得しています。

    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)}',
            '',
        ]))

レスポンスは以下の通りです。

最後に

今回は Auth0 Python SDK を「触ってみた」ということで、
まずは最低限 認証情報を設定してAPIを実行してみる部分まで実施してみました。

Auth0 Python SDK を使って何かを自動化したいけど
とっかかりが無くて困っている、という方の助けになれれば幸いです。