Sitecore管理画面ログイン時にMicrosoftのアカウントを使用してログインできるようにしてみます。
今回プロジェクトで利用したSitecoreのバージョンは10.1.1、Solrは8.4.0。SIF2.3.0を利用しています
まずはAzureポータルにて各種設定を行う
認証で使うアプリの作成
AzurePortalを開き、認証用のアプリとセキュリティグループを作成します。
https://portal.azure.com/#home
右上に現在選択されているテナント(ディレクトリ)が表示されています。
顧客先のディレクトリではないことを必ず確認してください。
今回はLyzonのテナント内でアプリとセキュリティグループを作成します。
AzureActiveDirectoryを開きます(見つからない場合は「その他のサービス」から探します)
アプリの登録 を選びます。
新規登録 を選びます。
必要項目を記入し、画面下部の「登録」をクリックします。リダイレクトURIは後でも登録できます。
リダイレクトURIは「https://★prefix名★.identityserver/signin-oidc」の形式です。
(identityserverのURL、そして後ろに/signin-oidcを付ける)
アプリを作成すると↓のような画面になります。
赤枠の箇所の「アプリケーション(クライアント)ID」と「ディレクトリ(テナント)ID」を後ほど使用しますのでメモしておきます。
控えたら、次は左下の「マニフェスト」をクリックします。
JSON形式で設定値が表示されます。
2行目辺りにある「acceptMappedClaims」の行を探し、trueに書き換えます。
("acceptMappedClaims": true, へ変更する)
次に13行目あたりにある「groupMembershipClaims」を以下のように編集します。
「"groupMembershipClaims": null,」
↓↓↓
「"groupMembershipClaims": "SecurityGroup",」
完了したら左上の保存を押します。
次に「認証」をクリックします。
「ID トークン (暗黙的およびハイブリッド フローに使用)」にチェックを入れ、上の「保存」をクリックします。
アプリの登録はこれで完了です。
セキュリティグループの作成
続いてセキュリティグループを作成します。左上の会社名(テナント名)をクリックしてアプリの登録画面から移動します。
グループ を選択します。
新しいグループを作成します。
必要事項を入力して画面下部の「作成」を押します。
作成したグループを選択します。
作成したセキュリティグループのIDを後ほど利用します。
イメージ的には「このセキュリティグループに所属していたら、Sitecoreの〇〇ロールを割り振る」的な使い方を想定。
左側のメンバーから所属するメンバーを追加・削除できます。
セキュリティグループの作成はこれで完了です。
CMのログイン画面にAzureADボタンを表示する
Sitecore10.1.1はデフォルトでAzureADログインを実装できるファイルが備わっているようです
(AzureADmoduleをインストールしなくてもファイルとして存在しています。設定値がfalseで有効になっていないだけ)
ファイルの場所↓↓
C:\inetpub\wwwroot\★prefix名★.identityserver\sitecore\Sitecore.Plugin.IdentityProvider.AzureAd\Config\Sitecore.Plugin.IdentityProvider.AzureAd.xm
ファイルの中身↓↓
ファイルをそのまま編集しても良いですが、パッチのような形でファイルを別途作成します。
(パッチファイルは同階層に置く必要あり。ロール適用は不可の模様)
元々あるファイルをそのままコピーして、中身を編集します。
先ほどのアプリケーション(クライアントID)/ディレクトリ(テナント)ID、セキュリティグループのIDを利用します。
- アプリケーション(クライアント)IDがClientId
- ディレクトリ(テナント)IDがTenantId
に該当します。セキュリティグループIDは管理者権限の付与やロール振り分けに利用します。
セキュリティグループの振り分けはファイル下部にサンプルがコメントアウトしておいてあります。
↓↓↓変更後↓↓↓
セキュリティグループによる振り分けについては以下の画像を参考にしてください。
ファイルを書き換えたら、IISを再起動させて変更を反映します。
上記の設定でSitecoreのログイン画面にアクセスすると、AzureADでログインするボタンが現れます
ボタンを押してログインを試してみます。
初回アクセス時は「このアプリを使ってもいいですか?」的な画面が出てきます。許可をしないと利用できないようです。
アクセス許可の画面は出さないようにすることもできますが、AzureADの管理者権限を持ったユーザーで事前にアプリのアクセス許可をいじる必要があります。
何もロールを割り振っていなかったり、管理者権限を割り振っていないとSitecore管理画面にはログインできません。
正常に設定できていればMicrosoftアカウントのサインイン画面にリダイレクトされ、Microsoftアカウントでのサインインを促されます。
ロールの割り当てまたは管理者権限の割り当てが問題なければ、サインイン後にSitecoreの管理画面に入れるようになるはずです。
注釈:当手順はSitecoreIdentityServer(Sitecoreの認証サーバー)を利用している為、Sitecoreのインストール手順によってSIサーバーにリダイレクトされない設定になっているとうまく利用できないようです。
https://★prefix名★.local/sitecore とURL入力した際に
https://★prefix名★.local/identity/login/shell/SitecoreIdentityServerへリダイレクトされる環境であれば利用することができます。
うまくリダイレクトされない場合は、SitecoreStandardのconfigファイルによってリダイレクトされない設定になっている場合があるようです。
ログイン時にAzureADからユーザー情報を渡す
これまでの設定でAzureADボタンは実装できました。
実際にCMSにログイン後、ユーザーマネージャーを確認するとユーザーが作られています。
が、…誰なのかがいまいちよくわかりません。
このユーザー名は予め、Sitecore側で決められているランダムな文字列のようです。
ユーザー名を任意のものに変更する場合は当手順では残念ながらできません…。
もしユーザー名を任意のものに変更したい場合は、Sitecoreをカスタマイズする必要があります(当手順では紹介しません)。
…ですが、せめて誰なのか、わかるようにしたいですよね。
ログイン時にAzureADからユーザー情報を得てSitecore上で表示したい場合は
C:\inetpub\wwwroot\★prefix名★.local\App_Config\Sitecore\Owin.Authentication.IdentityServer\Sitecore.Owin.Authentication.IdentityServer.configファイルを編集します。
先ほどのSitecore.Plugin.IdentityProvider.AzureAd.xmlと同様にパッチファイルを作成したほうが良いかと思います。
このファイルは.configファイルなのでプロジェクトに組み込んでも大丈夫です。
(同階層に置く必要がないので「C:\inetpub\wwwroot\★prefix名★.local\App_Config」配下等に置けばよい)
144行目辺りの<propertyInitializer>内に追加で記述します。
<source name ~ >がAzureAD側のプロパティ名、<target name ~ >がSitecore側のプロパティ名です。
例として、下記のように編集しました。
emailアドレスとフルネームをAzureAD側から受け取り、Sitecoreで表示させます。
(※CustomTextについては、Sitecore側でカスタムプロファイルを適用すると利用できます)
一度ログアウトし、再度ログインしなおすと反映されます。
(ログインする際にAzureADから情報を取得してきてSitecore側に反映するようです)
以上の手順で、Sitecore管理画面へのアクセスにAzureADを用いたSSOを実装することができました。
ガリガリコードを書く必要がなく、比較的お手軽に実装できる気がします。
余談ですが、当手順でログインしたユーザーはロールを確認すると真っ白です。
ログイン時にロール振り分け機能が働いている為、Sitecore側では管理されない模様…。
※エントリーの内容・画像等は、公開時点での情報に基づきます。
※Sitecoreのバージョンによって実装されている機能が異なります。