SpringBoot Azure Active Directoryの最新ドキュメントを追跡する
最新のドキュメントについて
ベース1
基本的に最新のドキュメントは以下になります。
https://github.com/Azure/azure-sdk-for-java/tree/master/sdk/spring/azure-spring-boot-starter-active-directory
上記をMSのドメイン内で表示しているのが以下になります。(画像が表示されない。)
https://docs.microsoft.com/en-us/java/api/overview/azure/spring-boot-starter-active-directory-readme?view=azure-java-stable
ただし、上の設定だけだと不十分で過去の情報も併せて読む必要があります。
以下、過去のチュートリアルのAzureAD側の設定が参考になります。
https://docs.microsoft.com/en-us/azure/developer/java/spring-framework/configure-spring-boot-starter-java-app-with-azure-active-directory
ただ、参考にするべき画像の内容が異なる。
最低限必要なスコープの情報が古いままとなっている。スコープとしてDirectory.AccessAsUser.Allを割り当てる必要があり、この権限はサインインしたユーザが存在しているディレクトリと同じ階層のユーザ情報にすべてアクセスすることができる権限となっている。上長に不信感を与えて両省が下りない状態となる。AzureAdversion3.1.0までこの状態で、3.2.0からDirectory.Read.Allとなり、サインインしたユーザの情報を読み取ることのみができる権限のみ必要な状態となる。
なので、画像は間違いで、Directory.Read.Allを設定する必要があることになる。
バージョンによって異なると思われるので詳細は以下ファイルを確認すること。
補足知識 ドメイン知識 スコープ
スコープに関する記事 現状正しい情報を確認可能
https://docs.microsoft.com/en-us/graph/permissions-reference
ベース2 ログイン認可に必要なredirect-uriの制約に関する知識
ログイン時に必要に必要となるredirect-uriの制約(設定の変更はできないが認識する必要がある。)
サーバ側(AzureAD本体)のredirect-uriの設定を追加する必要がある。
この時に制約を知っておく必要がある。
https://docs.microsoft.com/en-us/azure/active-directory/develop/reply-url
補足知識
AzureADにはグループを認可局として扱うことができる機能がある。
認可局として扱う場合は、Springにはグループを設定する必要がある。
また、Spring側の設定にグループを追加する必要がある。
グループを設定したくない場合はAzureADのサーバ側に疑似的なグループを設定する必要がある。
また、session-statelessの設定を追加する必要がある。
https://docs.microsoft.com/en-us/java/api/overview/azure/active-directory-spring-boot-starter-readme?view=azure-java-stable
ベース3 ログアウト
SSOをAzureADが担保するためにアプリ側でセッションが切れている場合に通常のログアウトを行っても、AzureADサーバが担保するexpireの時間以内の場合は、自動的にログインした状態となる。ここを制御するためには、ログアウトのURLを設定する必要がある。
ログアウトについては以下を参考にする。
https://docs.microsoft.com/en-us/azure/active-directory/develop/scenario-web-app-sign-user-sign-in?tabs=java
特にURLが要//login.microsoftonline.com/common/oauth2/v2.0/logout
補足 最新情報を追う
最新リリースのソースを追う
下記ファイルの履歴やblameを確認して最新バージョン又はリリースバージョンのリビジョンを見つけることで特定のバージョンのソースを確認できる。
https://github.com/Azure/azure-sdk-for-java/blob/28993948d2cf44e1c2a13ff46120767ca232294f/sdk/spring/azure-spring-boot/pom.xml#L16
3.4.0リビジョンのソースは下記
https://github.com/Azure/azure-sdk-for-java/commit/a04075d5ce607d79d0b273b42b579b184dd0197d
認証のみの履歴を追う場合は、下記パッケージ配下の履歴だけを見れば十分追うことができる。
https://github.com/Azure/azure-sdk-for-java/commits/master/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad
リリースの状態を知りたいときは下記
https://github.com/Azure/azure-sdk-for-java/blob/master/sdk/spring/azure-spring-boot/CHANGELOG.md
Springbootとのバージョンの関係を知りたい場合は下記
https://github.com/Azure/azure-sdk-for-java/tree/master/sdk/spring/README.md
Spring Initializrの状態を知りたい場合は下記だが、更新が遅れる場合がある。
https://github.com/Azure/azure-sdk-for-java/blob/master/sdk/spring/spring-reference.yml
SpringOAuth2の差異
spring-oauth2のデフォルトだけで対応できるソーシャルサービスの場合は、redirect-uriの設定を一部変更可能
spring-azure-active-directoryの場合は、変更は不可
サーバ側(AzureADの本体側)のredirect-uriの設定は変更ができる。
ログアウトの設定もデフォルトのSpringのとは逸脱している注意が必要
SpringOAuth2のデフォルトカスタマイズ情報。AzureADの認証にはほとんど使えないが、考え方は参考に独自内部認証サービスを作成する場合や、SpringSecurityの大枠を知るためには読む必要がある。
https://docs.spring.io/spring-security/site/docs/5.2.x/reference/html/oauth2.html