メインコンテンツへスキップ
Auth0を使用すると、アプリケーションにすばやく認可を追加することができます。このガイドは、新規または既存のSpring BootアプリケーションにAuth0を統合する方法を説明します。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

サンプルプロジェクトを構成する

サンプルプロジェクトは/src/main/resources/application.ymlファイルを使用し、これをAPIに対して正しいAuth0ドメインAPI識別子 を使用するように構成します。このページからコードをダウンロードすると、自動的に構成されます。GitHubから例を複製する場合は、ご自身で入力する必要があります。
3

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

Gradleを使用している場合、Spring Boot GradleプラグインDependency Managementプラグインを使って必要な依存関係を追加し、依存関係のバージョンを解決することができます:
// build.gradle
plugins {

    id 'java'

    id 'org.springframework.boot'

    version '3.1.5'

    id 'io.spring.dependency-management'

    version '1.1.3'

}

dependencies {

    implementation 'org.springframework.boot:spring-boot-starter-web'

    implementation 'com.okta.spring:okta-spring-boot-starter:3.0.5'

}
Mavenを使用している場合は、Springの依存関係をpom.xmlファイルに追加します:
// pom.xml
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.1.5</version>
<relativePath/>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.okta.spring</groupId>
<artifactId>okta-spring-boot-starter</artifactId>
<version>3.0.5</version>
</dependency>
</dependencies>
4

リソースサーバーを構成する

アプリケーションをリソースサーバーとして構成し、JWTを検証するには、SecurityFilterChainのインスタンスを提供するクラスを作成し、@Configurationの注釈を追加します。

APIエンドポイントを保護する

以下に示されたルートは次の要求で使用することができます:
  • GET /api/public:認証を必要としない要求に使用できる
  • GET /api/private:追加スコープのないアクセストークンを含む認証された要求に使用できる
  • GET /api/private-scopedread: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

アプリケーションを実行する

サンプルプロジェクトを構築し実行するには、bootRun Gradleタスクを実行します。LinuxまたはmacOS:
./gradlew bootRun
Windows:
gradlew.bat bootRun
MavenとSpring Boot Mavenプラグインで独自のアプリケーションを構成している場合は、spring-boot:runゴールを実行することができます。LinuxまたはmacOS:
mvn spring-boot:run
Windows:
mvn.cmd spring-boot:run

次のステップ

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