Ruby on Rails APIに認可を追加する
このチュートリアルでは、カスタムAuth0Client
クラス内のjwt Gemを使って、アクセストークンの検証を実施します。Secured
と呼ばれるConcernを使って、受信アクセストークンからの認証を必要とするエンドポイントを認可します。
Auth0 DashboardでAPIをまだ作成していない場合は、対話型のセレクターを使ってAuth0 APIを新規作成します。そうでない場合は、プロジェクトに既存のAPIを選択します。
Auth0 Dashboardを使って初めてAPIをセットアップする場合には、使用の開始ガイドを確認してください。
それぞれのAuth0 APIにはAPI識別子があり、アプリケーションにアクセストークンの検証で使用されます。
アクセス許可は、ユーザーの代わりに、提供されたアクセストークンを使ってどのようにしてリソースにアクセスできるのかを定義できるようにします。たとえば、ユーザーがマネージャーアクセスレベルを持つ場合には、messages
リソースに対して読み出しアクセスを付与し、管理者アクセスレベルを持つ場合には、書き込みアクセスを付与することができます。
Auth0 Dashboardの[APIs]セクションにある[Permissions(権限)]ビューで使用可能なアクセス許可を定義することができます。
![[Auth0 Dashboard]>[Applications(アプリケーション)]>[APIs]>[Specific API(特定のAPI]>[Permissions(権限)]タブ](http://images.ctfassets.net/cdy7uua7fh8z/1s3Yp5zqJiKiSWqbPSezNO/acef814282795bef6921535f044f96e9/Quickstarts_API.png)
jwt Gemをインストールします。
gem 'jwt'
bundle install
Was this helpful?
Auth0Client
と呼ばれるクラスを作成します。このクラスは、リクエストのAuthorization
ヘッダーから得た受信アクセストークンをデコードし検証します。
Auth0Client
クラスはAuth0テナントの公開鍵を取得し、これを使ってアクセストークンの署名を検証します。Token
構造体はvalidate_permissions
メソッドを定義し、必要なスコープの配列を指定してアクセストークン内の特定のscope
を検索し、トークンのペイロードに存在するかを確認します。
受信リクエストのAuthorization
ヘッダー内でアクセストークンを検索するSecured
と呼ばれるConcernを作成します。
トークンが存在する場合、Auth0Client.validate_token
はjwt
Gemを使用してトークンの署名を確認し、トークンのクレームを検証します。
Concernには、アクセストークンが有効であることを検証するほか、トークンにリクエストされたリソースにアクセスするのに十分なスコープがあることを確認するためのメカニズムも整備されています。この例では、Auth0Client
クラスからToken.validate_permissions
メソッドを呼び出すことで、ブロックを受け取りアクセス許可を確認するvalidate_permissions
メソッドを定義します。
/private-scoped
ルートでは、定義されたスコープはペイロードに入ってくるスコープと交差され、別の配列から1つ以上の項目が含まれているかを判定します。
アプリケーションコントローラーにSecure
concernを追加すると、認可を必要とするコントローラーでbefore_action
フィルターのみを使用すればよいことになります。
パブリックエンドポイント/api/public
を処理するようにコントローラーを作成します。
/public
エンドポイントでは認可は必要でないため、before_action
は必要ありません。
/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(テスト)]タブ](http://images.ctfassets.net/cdy7uua7fh8z/6jeVBuypOGX5qMRXeJn5ow/dd20eb74e1e9079287762ce33dcf8e2d/Quickstart_Example_App_API.png)
要求のAuthorization
ヘッダーにアクセストークンを指定します。
curl --request GET \
--url http://{yourDomain}/api_path \
--header 'authorization: Bearer YOUR_ACCESS_TOKEN_HERE'
Was this helpful?
checkpoint.header
アプリケーションの構成が完了したら、アプリケーションを実行して次の点を確認します:
GET /api/public
が認証を必要としない要求に使用できる。GET /api/private
が認証された要求に使用できる。GET /api/private-scoped
がread:messages
スコープが付与されたアクセストークンを含む認証された要求に使用できる。
Next Steps
Excellent work! If you made it this far, you should now have login, logout, and user profile information running in your application.
This concludes our quickstart tutorial, but there is so much more to explore. To learn more about what you can do with Auth0, check out:
- Auth0 Dashboard - Learn how to configure and manage your Auth0 tenant and applications
- omniauth-auth0 SDK - Explore the SDK used in this tutorial more fully
- Auth0 Marketplace - Discover integrations you can enable to extend Auth0’s functionality
Sign up for an or to your existing account to integrate directly with your own tenant.