本番環境でスケジュールされた高頻度の呼び出しを行うには、バックエンドでトークンを自動的に取得するプロセスを構築する必要があります (これにより、実質的に有効期限のないトークンを再現できます) 。
Auth0 に v2 のアクセストークンを要求するには、前提条件の手順で作成したマシン間アプリケーションの認証情報を使用して、https://{yourDomain}/oauth/token エンドポイントに POST リクエストを送信します。
ペイロードは次の形式にする必要があります。
`{yourClientSecret}` は、アプリケーションの Settings タブにある の値に置き換えてください。
リクエストパラメーターは次のとおりです。
| Request Parameter | Description |
|---|
| grant_type | 実行する OAuth 2.0 フロー を指定します。マシン間通信には client_credentials を使用します。 |
| client_id | 作成したマシン間アプリケーションの クライアントID フィールドの値です。アプリケーションの Settings タブで確認できます。 |
| client_secret | 作成したマシン間アプリケーションの クライアントシークレット フィールドの値です。アプリケーションの Settings タブで確認できます。 |
| audience | Auth0 Management API の 識別子 フィールドの値です。API の Settings タブで確認できます。 |
update:client_grants および create:client_grants スコープは、クライアントが自身に追加の権限を付与できるため、高権限のアプリケーションでのみ使用してください。
レスポンスには、署名済みのJWT、有効期限、付与されたスコープ、およびトークンタイプが含まれます。
{
"access_token": "eyJ...Ggg",
"expires_in": 86400,
"scope": "read:clients create:clients read:client_keys",
"token_type": "Bearer"
}
以上から、 は 24 時間 (86400 秒) で期限切れになり、アプリケーションの読み取りと作成を行う権限が付与されており、Bearer アクセストークン であることがわかります。
Auth0 の Node.js クライアントライブラリを使用する
HTTP 呼び出しの代わりに、node-auth0 ライブラリを使用して、Management API のトークンを自動的に取得できます。
このトークンを使用するには、リクエストの Authorization ヘッダーに含めてください。
たとえば、すべてのアプリケーションを取得するには、次のようにします。
各エンドポイントのcurlコマンドは、Management API v2 Explorer から取得できます。呼び出すエンドポイントに移動し、Test this endpoint セクションの get curl command リンクをクリックしてください。
このPythonスクリプトは Management API v2 のアクセストークンを取得し、それを使用して すべてのアプリケーションを取得 エンドポイントを呼び出し、レスポンスをコンソールに出力します。
実行する前に、次の変数に有効な値が設定されていることを確認してください。
AUDIENCE: Auth0 Management API の 識別子。これは API の Settings タブ で確認できます。
DOMAIN: 作成したマシン間アプリケーションの ドメイン。
CLIENT_ID: 作成したマシン間アプリケーションの 。
CLIENT_SECRET: 作成したマシン間アプリケーションの クライアントシークレット。
def main():
import json, requests
from requests.exceptions import RequestException, HTTPError, URLRequired
# 設定値
domain = 'YOUR_DOMAIN'
audience = f'https://{domain}/api/v2/'
client_id = '{yourClientId}'
client_secret = '{yourClientSecret}'
grant_type = "client_credentials" # 使用する OAuth 2.0 フロー
# Auth0 からアクセストークンを取得する
base_url = f"https://{domain}"
payload = {
'grant_type': grant_type,
'client_id': client_id,
'client_secret': client_secret,
'audience': audience
}
response = requests.post(f'{base_url}/oauth/token', data=payload)
oauth = response.json()
access_token = oauth.get('access_token')
# リクエストの Authorization ヘッダーにトークンを追加する
headers = {
'Authorization': f'Bearer {access_token}',
'Content-Type': 'application/json'
}
# トークンを使用してすべてのアプリケーションを取得する
try:
res = requests.get(f'{base_url}/api/v2/clients', headers=headers)
print(res.json())
except HTTPError as e:
print(f'HTTPError: {str(e.code)} {str(e.reason)}')
except URLRequired as e:
print(f'URLRequired: {str(e.reason)}')
except RequestException as e:
print(f'RequestException: {e}')
except Exception as e:
print(f'Generic Exception: {e}')
# main() 関数を呼び出すための標準的なボイラープレート。
if __name__ == '__main__':
main()