このチュートリアルでは、カスタム
要求の
Auth0Client
クラス内のjwt Gemを使って、アクセストークンの検証を実施します。Secured
と呼ばれるConcernを使って、受信アクセストークンからの認証を必要とするエンドポイントを認可します。Auth0 DashboardでAPIをまだ作成していない場合は、対話型のセレクターを使ってAuth0 APIを新規作成します。そうでない場合は、プロジェクトに既存のAPIを選択します。Auth0 Dashboardを使って初めてAPIをセットアップする場合には、使用の開始ガイドを確認してください。それぞれのAuth0 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
依存関係をインストールする
jwt Gemをインストールします。
3
Auth0Clientクラスを作成する
Auth0Client
と呼ばれるクラスを作成します。このクラスは要求のAuthorization
ヘッダーから得た受信アクセストークンをデコードし検証します。Auth0Client
クラスはAuth0テナントの公開鍵を取得し、これを使ってアクセストークンの署名を検証します。Token
構造体はvalidate_permissions
メソッドを定義し、必要なスコープの配列を指定してアクセストークン内の特定のscope
を検索し、トークンのペイロードに存在するかを確認します。4
Secured concernを定義する
受信要求の
Authorization
ヘッダー内でアクセストークンを検索するSecured
と呼ばれるConcernを作成します。トークンが存在する場合、Auth0Client.validate_token
はjwt
Gemを使用してトークンの署名を確認し、トークンのクレームを検証します。Concernには、アクセストークンが有効であることを検証するほか、トークンに要求されたリソースにアクセスするのに十分なスコープ があることを確認するためのメカニズムも整備されています。この例では、Auth0Client
クラスからToken.validate_permissions
メソッドを呼び出すことで、ブロックを受け取りアクセス許可を確認するvalidate_permissions
メソッドを定義します。/private-scoped
ルートでは、定義されたスコープはペイロードに入ってくるスコープと交差され、別の配列から1つ以上の項目が含まれているかを判定します。5
ApplicationControllerにSecure concernを含める
アプリケーションコントローラーに
Secure
concernを追加すると、認可を必要とするコントローラーでbefore_action
フィルターのみを使用すればよいことになります。6
パブリックエンドポイントを作成する
パブリックエンドポイント
/api/public
を処理するようにコントローラーを作成します。/public
エンドポイントでは認可は必要でないため、before_action
は必要ありません。7
プライベートエンドポイントを作成する
/api/private
と/api/private-scoped
というプライベートエンドポイントを処理するようにコントローラーを作成します。/api/private
は、追加スコープのないアクセストークンを含む認証された要求に使用することができます。/api/private-scoped
は、read:messages
スコープが付与されたアクセストークンを含む認証された要求に使用することができます。保護されたエンドポイントはSecured
concernからauthorize
メソッドを呼び出す必要があります。そのためには、before_action :authorize
を使用します。これによって、Secured.authorize
メソッドがPrivateController
の各アクションの前に呼び出されます。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
ヘッダーにアクセストークンを指定します。チェックポイント
アプリケーションの構成が完了したら、アプリケーションを実行して次の点を確認します: GET /api/publicが認証を必要としない要求に使用できる。 GET /api/privateが認証された要求に使用できる。 GET /api/private-scopedがread:messagesスコープが付与されたアクセストークンを含む認証された要求に使用できる。次のステップ
成功です!ここまで来れば、アプリケーションにログイン、ログアウト、ユーザープロファイル情報が備わっているはずです。これでクイックスタートチュートリアルは終了ですが、機能はまだまだたくさんあります。Auth0でできることについて詳しくは、以下をご覧ください。- Auth0 Dashboard - Auth0のテナントやアプリケーションを構成して管理する方法について説明します
- omniauth-auth0 SDK - このチュートリアルで使用されているSDKをより詳しく説明します
- Auth0 Marketplace - Auth0の機能性を拡張できる各種の統合を見つけられます