Auth0を使用すると、アプリケーションにすばやく認可を追加することができます。このガイドは、新規または既存のSpring BootアプリケーションにAuth0を統合する方法を説明します。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
サンプルプロジェクトを構成する
サンプルプロジェクトは
/src/main/resources/application.yml
ファイルを使用し、これをAPIに対して正しいAuth0ドメイン とAPI識別子 を使用するように構成します。このページからコードをダウンロードすると、自動的に構成されます。GitHubから例を複製する場合は、ご自身で入力する必要があります。3
依存関係をインストールする
Gradleを使用している場合、Spring Boot GradleプラグインとDependency Managementプラグインを使って必要な依存関係を追加し、依存関係のバージョンを解決することができます:Mavenを使用している場合は、Springの依存関係を
pom.xml
ファイルに追加します:4
リソースサーバーを構成する
アプリケーションをリソースサーバーとして構成し、JWTを検証するには、
SecurityFilterChain
のインスタンスを提供するクラスを作成し、@Configuration
の注釈を追加します。APIエンドポイントを保護する
以下に示されたルートは次の要求で使用することができます:GET /api/public
:認証を必要としない要求に使用できるGET /api/private
:追加スコープのないアクセストークンを含む認証された要求に使用できるGET /api/private-scoped
:read:messages
スコープが付与されたアクセストークンを含む認証された要求に使用できる
SecurityConfig
クラスのfilterChain()
メソッドで指定されたHttpSecurity
オブジェクトを使用して、APIメソッドのセキュリティを確保する方法を示します。ルートマッチャーは必要な認可レベルに基づいてアクセスを制限します。デフォルトで、Spring SecurityはJWTの
scope
クレームで、クレームごとにGrantedAuthority
を作成します。このスコープでは、hasAuthority("SCOPE_read:messages")
メソッドを使用して、read:messages
スコープを含む有効なJWTへのアクセスを制限することができます。5
ドメインオブジェクトを作成する
エンドポイントがJSONを返すには、Javaレコードを使用することができます。このオブジェクトのメンバー変数は、JSONのキー値にシリアル化されます。
Message
と呼ばれる新しいレコードを、API呼び出し中に返すサンプルドメインオブジェクトとして作成します。6
APIコントローラーを作成する
APIController
という名前の新しいクラスを作成し、エンドポイントへの要求を処理します。APIController
には、APIエンドポイントを保護するセクションで定義されるように、3つのルートがあります。たとえば、@CrossOrigin
の注釈からすべてのオリジンを許可します。実際のアプリケーションでは、ユースケースに対してCORS
を構成する必要があります。7
アプリケーションを実行する
サンプルプロジェクトを構築し実行するには、Windows:MavenとSpring Boot Mavenプラグインで独自のアプリケーションを構成している場合は、Windows:
bootRun
Gradleタスクを実行します。LinuxまたはmacOS:spring-boot:run
ゴールを実行することができます。LinuxまたはmacOS:チェックポイント
サンプルアプリケーションはhttp://localhost:3010/で入手できます。「APIの使用」の記事でAPIをテストおよび使用する方法についてお読みください。次のステップ
成功です!ここまで来れば、アプリケーションにログイン、ログアウト、ユーザープロファイル情報が備わっているはずです。これでクイックスタートチュートリアルは終了ですが、機能はまだまだたくさんあります。Auth0でできることについて詳しくは、以下をご覧ください。- Auth0 Dashboard - Auth0のテナントやアプリケーションを構成して管理する方法について説明します
- Okta Spring Boot Starter SDK - このチュートリアルで使用されているSDKをより詳しく説明します
- Auth0 Marketplace - Auth0の機能性を拡張できる各種の統合を見つけられます