このガイドは、Flaskを使ってビルドされた新規または既存のPython APIにAuth0を統合する方法を説明します。Auth0 DashboardでAPIをまだ作成していない場合は、対話型のセレクターを使ってAuth0 APIを新規作成します。そうでない場合は、統合したいプロジェクトを表す既存のAPIを選択することができます。または、Auth0 Dashboardを使って初めてAPIをセットアップする方法を使用の開始ガイドで確認することもできます。Auth0にあるAPIはそれぞれAPI識別子を使って構成され、アプリケーションのコードはAPI識別子をオーディエンスとしてアクセストークンを検証します。
Auth0を初めてご利用ですか? Auth0の仕組みと、OAuth 2.0フレームワークを用いたAPI認証と認可の実装について説明します。
1
アクセス許可を定義する
アクセス許可は、ユーザーの代わりに、提供されたアクセストークンを使ってどのようにしてリソースにアクセスできるのかを定義できるようにします。たとえば、ユーザーがマネージャーアクセスレベルを持つ場合には、![[Auth0 Dashboard]>[Applications(アプリケーション)]>[APIs]>[Specific API(特定のAPI]>[Permissions(権限)]タブ](https://mintlify.s3.us-west-1.amazonaws.com/docs-dev/images/ja-jp/cdy7uua7fh8z/1s3Yp5zqJiKiSWqbPSezNO/acef814282795bef6921535f044f96e9/Quickstarts_API.png)
messages
リソースに対して読み出しアクセスを付与し、管理者アクセスレベルを持つ場合には、書き込みアクセスを付与することができます。Auth0 Dashboardの[APIs]セクションにある**[Permissions(権限)]** ビューで使用可能なアクセス許可を定義することができます。![[Auth0 Dashboard]>[Applications(アプリケーション)]>[APIs]>[Specific API(特定のAPI]>[Permissions(権限)]タブ](https://mintlify.s3.us-west-1.amazonaws.com/docs-dev/images/ja-jp/cdy7uua7fh8z/1s3Yp5zqJiKiSWqbPSezNO/acef814282795bef6921535f044f96e9/Quickstarts_API.png)
以下の例では
read:messages
スコープを使用します。2
依存関係をインストールする
requirements.txt
に次の依存関係を追加します:3
JWTバリデーターを作成する
Authlibという名前のライブラリーを使用して、ResourceProtectorを作成します。これはFlaskデコレーターの一種で、該当するバリデーターを使ってリソース(APIルート)を保護します。バリデーターは、リソースに渡すアクセストークンに有効な署名とクレームがあることを検証します。AuthLibの
JWTBearerTokenValidator
バリデーターに多少の変更を加えて、アクセストークンの検証要件が満たされるようにします。Auth0JWTBearerTokenValidator
を作成するには、domain
とaudience
(API識別子)に渡すことが必要です。そうすると、トークンの署名を検証するのに必要な公開鍵が取得され、JWTBearerTokenValidator
クラスに渡されます。そして、クラスのclaims_options
をオーバーライドし、トークンのexpiry、audience、issueクレームが要件を満たして有効であることを確認します。4
Flaskアプリケーションを作成する
次に、3つのAPIルートを使ってFlaskアプリケーションを作成します。
要求の
/api/public
:認証を必要としないパブリックエンドポイントです。/api/private
:有効なJWTアクセストークンを必要とするプライベートエンドポイントです。/api/private-scoped
:与えられたscope
を含む有効なJWTアクセストークンを必要とするプライベートエンドポイントです。
require_auth
デコレーターがあり、これは、以前に作成したAuth0JWTBearerTokenValidator
を使用するResourceProtector
です。Auth0JWTBearerTokenValidator
を作成するには、テナントのドメインと以前に作成したAPIのAPI識別子に渡します。private_scoped
ルートのrequire_auth
デコレーターは、追加の引数である"read:messages"
を受け付けます。これは、以前に作成したアクセス許可(スコープ)について、アクセストークンをチェックします。APIを呼び出す
APIを呼び出すにはアクセストークンが必要です。テスト用のアクセストークンは、API設定の**[Test(テスト)]** ビューから取得することができます。![[Auth0 Dashboard]>[Applications(アプリケーション)]>[API]>[Specific API(特定のAPI]>[Test(テスト)]タブ](https://mintlify.s3.us-west-1.amazonaws.com/docs-dev/images/ja-jp/cdy7uua7fh8z/6jeVBuypOGX5qMRXeJn5ow/dd20eb74e1e9079287762ce33dcf8e2d/Quickstart_Example_App_API.png)
Authorization
ヘッダーにアクセストークンを指定します。次のステップ
成功です!ここまで来れば、アプリケーションにログイン、ログアウト、ユーザープロファイル情報が備わっているはずです。これでクイックスタートチュートリアルは終了ですが、機能はまだまだたくさんあります。Auth0でできることについて詳しくは、以下をご覧ください。- Auth0 Dashboard - Auth0のテナントやアプリケーションを構成して管理する方法について説明します
- auth0-python SDK - このチュートリアルで使用されているSDKをより詳しく説明します
- Auth0 Marketplace - Auth0の機能性を拡張できる各種の統合を見つけられます