メインコンテンツへスキップ
このチュートリアルでは、カスタムAuth0Clientクラス内のjwt Gemを使って、アクセストークンの検証を実施します。Securedと呼ばれるConcernを使って、受信アクセストークンからの認証を必要とするエンドポイントを認可します。Auth0 DashboardでAPIをまだ作成していない場合は、対話型のセレクターを使ってAuth0 APIを新規作成します。そうでない場合は、プロジェクトに既存のAPIを選択します。Auth0 Dashboardを使って初めてAPIをセットアップする場合には、使用の開始ガイドを確認してください。それぞれのAuth0 APIにはAPI識別子があり、アプリケーションにアクセストークンの検証で使用されます。
Auth0を初めてご利用ですか? Auth0の仕組みと、OAuth 2.0フレームワークを用いたAPI認証と認可の実装について説明します。
1

アクセス許可を定義する

アクセス許可は、ユーザーの代わりに、提供されたアクセストークンを使ってどのようにしてリソースにアクセスできるのかを定義できるようにします。たとえば、ユーザーがマネージャーアクセスレベルを持つ場合には、messagesリソースに対して読み出しアクセスを付与し、管理者アクセスレベルを持つ場合には、書き込みアクセスを付与することができます。Auth0 Dashboardの[APIs]セクションにある**[Permissions(権限)]** ビューで使用可能なアクセス許可を定義することができます。
[Auth0 Dashboard]>[Applications(アプリケーション)]>[APIs]>[Specific API(特定のAPI]>[Permissions(権限)]タブ
以下の例ではread:messagesスコープを使用します。
2

依存関係をインストールする

jwt Gemをインストールします。
gem 'jwt'
bundle install
3

Auth0Clientクラスを作成する

Auth0Clientと呼ばれるクラスを作成します。このクラスは要求のAuthorizationヘッダーから得た受信アクセストークンをデコードし検証します。Auth0ClientクラスはAuth0テナントの公開鍵を取得し、これを使ってアクセストークンの署名を検証します。Token構造体はvalidate_permissionsメソッドを定義し、必要なスコープの配列を指定してアクセストークン内の特定のscopeを検索し、トークンのペイロードに存在するかを確認します。
4

Secured concernを定義する

受信要求のAuthorizationヘッダー内でアクセストークンを検索するSecuredと呼ばれるConcernを作成します。トークンが存在する場合、Auth0Client.validate_tokenjwt 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(テスト)]タブ
要求のAuthorizationヘッダーにアクセストークンを指定します。
curl --request get \
--url 'http:///%7ByourDomain%7D/api_path' \
--header 'authorization: Bearer YOUR_ACCESS_TOKEN_HERE'
チェックポイント
アプリケーションの構成が完了したら、アプリケーションを実行して次の点を確認します: GET /api/publicが認証を必要としない要求に使用できる。 GET /api/privateが認証された要求に使用できる。 GET /api/private-scopedがread:messagesスコープが付与されたアクセストークンを含む認証された要求に使用できる。

次のステップ

成功です!ここまで来れば、アプリケーションにログイン、ログアウト、ユーザープロファイル情報が備わっているはずです。これでクイックスタートチュートリアルは終了ですが、機能はまだまだたくさんあります。Auth0でできることについて詳しくは、以下をご覧ください。
  • Auth0 Dashboard - Auth0のテナントやアプリケーションを構成して管理する方法について説明します
  • omniauth-auth0 SDK - このチュートリアルで使用されているSDKをより詳しく説明します
  • Auth0 Marketplace - Auth0の機能性を拡張できる各種の統合を見つけられます
I