はじめに
1
新しいプロジェクトを作成
必要な依存関係を含む Spring Boot プロジェクトを作成します。
- Spring Initializr を使用する
- または Maven で手動で作成する
2
Okta Spring Boot Starterを追加する
Okta Spring Boot Starter の依存関係をプロジェクトに追加します。これにより、Auth0/Okta 向けの自動構成を含む Spring Security OAuth2 のログインサポートが追加されます。
- Maven (pom.xml)
- Gradle (build.gradle)
3
Auth0を設定する
Auth0 テナントに Regular Web Application を作成し、プロジェクトに設定を追加します。CLIコマンドを実行して Auth0 アプリを自動的に設定する方法と、Auth0 Dashboardから手動で行う方法のいずれかを選択できます:
- CLI
- Auth0 Dashboard
Auth0 アプリケーションを作成して
src/main/resources/application.yml を更新するには、プロジェクトのルートディレクトリで次のシェルコマンドを実行します。このコマンドは次を実行します:
- 認証済みかどうかを確認します (必要に応じてログインを促します)
http://localhost:3000用に設定された Auth0 Regular Web Application を作成しますokta.oauth2.issuer、okta.oauth2.client-id、okta.oauth2.client-secretを含むsrc/main/resources/application.ymlを生成します
--build-tool maven を --build-tool gradle に置き換えてください。4
認証を設定する
OAuth2によるログインを有効にし、Auth0のログアウトを処理するセキュリティ設定を作成します。未認証のユーザーは自動的にAuth0のログインページへリダイレクトされます。
5
コントローラーとビューを作成する
ホームページとプロファイルページ用のコントローラーと Thymeleaf テンプレートを作成します。
6
アプリケーションを実行
Maven または Gradle のラッパーを使ってアプリケーションを起動します。アプリケーションは
- Maven
- Gradle
http://localhost:3000 で起動します。Auth0 のログインフローをトリガーするには、http://localhost:3000/profile にアクセスします。これで、Auth0ログインを備えた完全に機能する Spring Boot の Web アプリケーションが localhost で動作しているはずです。ホームページは公開されており、
/profile にアクセスすると、未認証のユーザーは Auth0 のログインページにリダイレクトされます。高度な使い方
ユーザープロファイルのクレームにアクセスする
ユーザープロファイルのクレームにアクセスする
@AuthenticationPrincipal OidcUser パラメーターを使用すると、ID トークン内のすべてのクレームにアクセスできます。getClaims() を使ってクレーム一式を取得することも、特定のクレーム用の getter メソッドを個別に使うこともできます。ロールベースのアクセス制御
ロールベースのアクセス制御
Auth0 のロールに基づいて、ページへのアクセスを制限できます。まず Auth0 Action を使ってロールを ID トークンに追加し、次にセキュリティ設定で
hasAuthority() を使用します。トークンにロールを追加する
- Auth0 Dashboard → Actions → Flows → Login に移動します。
- ロールをカスタムクレームとして ID トークンに追加するカスタム Action を作成します。
認可を設定する
特定のロールを endpoint で必須にするよう、SecurityConfig を更新します。権限のカスタムマッピング
権限のカスタムマッピング
Okta starter は、
AuthoritiesProvider インターフェースを通じて権限のカスタムマッピングをサポートしています。ユーザー属性や外部データソースに基づいてカスタム GrantedAuthority オブジェクトを追加するには、bean を登録します。よくある問題
ログインへのリダイレクトに失敗する - 無効なコールバック URL
ログインへのリダイレクトに失敗する - 無効なコールバック URL
ログインを選択すると、コールバック URL の不一致に関するエラーが Auth0 に表示されます。Auth0 アプリケーションの Allowed Callback URLs は、Spring Security が使用するコールバック URL と完全に一致している必要があります。デフォルトは
http://localhost:3000/login/oauth2/code/okta です。- Auth0 Dashboard で、アプリケーション → Your App → Settings に移動します。
- Allowed Callback URLs に
http://localhost:3000/login/oauth2/code/oktaを追加します。 - Save Changes を選択します。
起動時に issuer が無効になる
起動時に issuer が無効になる
issuer の不一致により、アプリケーションの起動またはログインに失敗します。
okta.oauth2.issuer には、https:// と末尾の / を含む完全な Auth0 テナント URL を指定する必要があります。起動時に OIDC ディスカバリーが失敗する
起動時に OIDC ディスカバリーが失敗する
/.well-known/openid-configuration の取得時に接続エラーが発生し、アプリケーションの起動に失敗します。Okta Spring Boot Starter は、起動時に issuer URL から OpenID Connect のディスカバリードキュメントを取得します。issuer URL が正しく、ネットワークから到達可能であることを確認してください。社内の firewall 配下にある場合は、プロキシを設定してください。設定値が見つからない
設定値が見つからない
アプリケーションは起動しますが、設定プロパティが読み込まれていないためログインに失敗します。
application.yml で、okta.oauth2 名前空間の下に正しい YAML のインデントが使われていることを確認してください。Logout で Auth0 セッションがクリアされない
Logout で Auth0 セッションがクリアされない
ログアウトを選択すると、Auth0 のログインページが表示されないまま、ユーザーがすぐに再度ログインされます。
SecurityConfig に、Auth0 の /v2/logout エンドポイントにリダイレクトするカスタム LogoutHandler が含まれていることを確認してください。あわせて、Auth0 の Application Settings の Allowed Logout URLs に http://localhost:3000/ が含まれていることも確認してください。追加リソース
SDKドキュメント
SDK の完全なドキュメント、ソースコード、リリースノート
Auth0ドキュメント
Spring Boot アプリケーション向けの Auth0 公式ドキュメント
Spring Securityリファレンス
Spring Security OAuth2 Login のドキュメント
設定リファレンス
使用可能なすべての okta.oauth2.* 設定プロパティ
Auth0 Dashboard
Auth0 の API とアプリケーションを管理
コミュニティフォーラム
Auth0 コミュニティからサポートを受ける
サンプルアプリケーション
MVC Login サンプル
Auth0 OAuth2 連携によるログイン、ログアウト、プロファイルページが含まれています
http://localhost:3000 を開き、Login リンクを選択して Auth0 のログインフローをテストします。