本番環境に定期的かつ頻繁な呼び出しを行うには、バックエンドでトークンを自動的に提供するプロセスを構築(して、擬似的に無期限のトークンに)します。
前提条件
アクセストークンの取得
Auth0に v2トークンを求めるには、前提条件のステップで作成したM2Mアプリケーションの資格情報を使用して、POST
操作をhttps://{yourDomain}/oauth/token
エンドポイントに実行します。
ペイロードは次の形式でなければなりません。
アプリケーションの設定タブで必ず{yourClientSecret}
をクライアントシークレットに更新します。
要求パラメーター:
要求パラメーター | 説明 |
---|
grant_type | 実行したいOAuth 2.0フローを示します。マシンツーマシン通信については、client_credentials の値を使用します。 |
client_id | これは作成したマシンツーマシンアプリケーションの クライアントID フィールドの値です。アプリケーションの設定タブで見つけることができます。 |
client_secret | これは作成したマシンツーマシンアプリケーションの クライアントシークレット フィールドの値です。アプリケーションの設定タブで見つけることができます。 |
audience | これはAuth0 Management API の 識別子 フィールドの値です。APIの設定タブで見つけることができます。 |
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秒)後に切れること、アプリケーションの読み取りと作成が許可されていること、そしてベアラーアクセストークンであることがわかります。
Auth0のNode.jsクライアントライブラリーの使用
HTTP呼び出しの代わりに、node-auth0ライブラリーを使用して自動的にManagement APIのトークンを取得することもできます。
アクセストークンの使用
このトークンを使用するには、要求のAuthorization
ヘッダーに含めます。
curl --request POST \
--url http:///%7BmgmtApiEndpoint%7D \
--header 'authorization: Bearer {yourMgmtApiAccessToken}' \
--header 'content-type: application/json'
たとえば、すべてのアプリケーションを取得するには、以下を使用します。
Management API v2 Explorerから、各エンドポイント用のcurlコマンドを取得できます。呼び出したいエンドポイントに移動して、「このエンドポイントをテスト」 セクションにあるcurlコマンドを取得 リンクをクリックします。
例:Pythonの実装
このPythonスクリプトはManagement API v2のアクセストークンを取得し、すべてのアプリケーション取得エンドポイントの呼び出しに使用して、コンソールに応答を出力します。
実行する前に、以下の変数が有効な値であることを確認してください。
AUDIENCE
:Auth0 Management API
の Identifier(識別子)。APIの[Settings(設定)]タブにあります。
DOMAIN
:作成したM2Mアプリケーションの Domain(ドメイン)。
CLIENT_ID
:作成したM2Mアプリケーションの (クライアントID)。
CLIENT_SECRET
:作成したM2Mアプリケーションの (クライアントシークレット)。
def main():
import json, requests
from requests.exceptions import RequestException, HTTPError, URLRequired
# Configuration Values
domain = 'YOUR_DOMAIN'
audience = f'https://{domain}/api/v2/'
client_id = 'YOUR_CLIENT_ID'
client_secret = 'YOUR_CLIENT_SECRET'
grant_type = "client_credentials" # OAuth 2.0 flow to use
# Get an Access Token from 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')
# Add the token to the Authorization header of the request
headers = {
'Authorization': f'Bearer {access_token}',
'Content-Type': 'application/json'
}
# Get all Applications using the token
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}')
# Standard boilerplate to call the main() function.
if __name__ == '__main__':
main()
もっと詳しく