GoogleアカウントでAzure ADにサインイン

皆さんこんにちは。国井です。

今さらな話かもしれませんが、備忘録として載せておきます。
Azure ADに登録されたアプリへのアクセス許可は基本的にアプリが登録されたAzure ADディレクトリ内のユーザーまたはグループに対してしか割り当てることができません。しかし、アプリへのアクセス許可を自分の会社のユーザー以外にも割り当てたいというニーズはあると思います。そのような時に利用するのがAzure AD B2Bの機能になりますが、Azure AD B2Bも相手の会社がAzure ADを利用していることが前提となります。では、アクセス許可を与えたい相手がAzure ADを使っていない場合はどうすればよいでしょうか?
今回紹介するのは、Azure ADに関連付けられたアプリへのアクセス許可にGoogleユーザー(もちろんG SuiteもOK!)を割り当てたいというときの方法です。

■ ■ ■

Azure ADではAzure ADに関連付けられたアプリへのアクセス許可を割り当てるときに、(一部例外を除いて)次のユーザーに対する割り当てができます。

・自分のディレクトリ内のユーザー/グループ
・ゲストユーザーとして登録された他のAzure ADディレクトリのユーザー
(Azure AD B2B)

・Googleに登録されたユーザー
・GitHubに登録されたユーザー

もし、相手の会社のユーザーに対してアプリへのアクセス許可を割り当てたければ、相手の会社でAzure ADを使っていればAzure AD B2Bで登録されたユーザー、Googleを利用していればGoogleユーザーアカウントを使ってアクセス許可の割り当てを行います。

この仕組みはOAuth 2.0プロトコルを使った連携によって実現しており、
私たちがアプリにアクセスするときにAzure ADのサインイン画面でGoogleのユーザー名を入力すれば、Google IdPで認証を行うようにリダイレクトされます。これは、Azure AD B2BやGitHubのユーザーでサインインするときも同じ要領です。

image

そして、Google IdPでの認証が完了すると、認証が完了したことを示すトークンがAzure ADに送られてきて、自分の会社のAzure ADでアプリへのアクセス許可を検証します(ちなみにこの動きはAzure AD B2Bでも同様の連携を行います)。

もちろん、このような連携を行うためには事前にGoogleユーザーを管理するGoogle IdPとAzure ADの間での連携設定が必要になるので、ここではxxxxx@gmail.com ユーザーがGoogleで認証し、その結果に基づいてAzure ADに関連付けられたリソースにアクセスできるようになるために必要な設定を順番に紹介します。

Google IdP×Azure ADの連携設定

Googleユーザーにアプリへのアクセス許可を割り当てられるようにするために、やらなければならないことはGoogle IdPをAzure ADに登録することです。設定はAzure管理ポータルから[Azure Active Directory]-[組織の関係]から[IDプロバイダー]で行います。

image

このとき、Google IdPのクライアントIDとクライアントシークレットの情報が必要になるので、まず最初にGoogleに値を取りに行きます。
Google IdPのクライアントIDとクライアントシークレットはhttps://console.developers.google.comからとってきます。
gmailアカウントでログインし、[認証情報]から[認証情報を作成]-[OAuthクライアントID]をクリックして、

image

承認済みのJavaScript生成元に
https://login.microsoftonline.com

承認済みのリダイレクトURLに
https://login.microsoftonline.com/te/ディレクトリID/oauth2/authresp

と入力します。ちなみにディレクトリIDはAzure管理ポータルの[Azure Active Directory]-[プロパティ]から確認できます。

image

上記の設定が完了すると、クライアントIDとクライアントシークレットが生成されるので、

image

Azure管理ポータル画面の[Azure Active Directory]-[組織の関係]-[IDプロバイダー]に戻ってきて、[+Google]をクリックし、

image

Google IdP側で取得したクライアントIDとクライアントシークレットを登録します。

image

設定はこれだけ。
今回は、Azure App Serviceに作成したWebアプリにxxxx@gmail.comアカウントを登録してみました。(ちなみにAzure AD B2Bの場合は、事前に他のディレクトリのユーザーをゲストユーザーとして登録しておく必要がありますが、Googleユーザーの場合はいきなりアクセス許可を割り当てられます)

image

アクセス許可を割り当てるなどして、自分の会社のAzure ADディレクトリで使われているGoogleユーザーの一覧は[Azure Active Directory]-[組織の関係]から確認できます。

image

では、アクセスしてみましょう。アクセス許可が割り当てられたWebアプリのURLを入力すると、サインイン画面にリダイレクトされるので、
招待されたユーザーであるgmailアカウントを入力し、パスワードを入力すると、

image

OAuth2.0ではおなじみの画面(同意とか承諾って呼ばれる画面ですね)が出てきます。ここを承諾すると、

image

次に利用規約画面が登場します。ここで表示される利用条件は[Azure Active Directory]-[組織の関係]-[利用規約]で登録したドキュメントが表示されます。また、同意した場合、同意したユーザーの一覧が同じく[利用規約]画面で確認できます。

image

利用規約に同意すると、Webアプリにアクセスできました。

image

Google IdPとAzure ADの連携設定さえ行えば、ゲストユーザーの作成すら行うことなく、アクセス許可を割り当てるだけで、Googleユーザーがアプリにアクセスできるようになります。

また、今回はアプリにアクセス許可を割り当て、その上でアクセスできる様子を確認しましたが、アクセスパネル(https://myapps.microsoft.com/)経由でアクセスさせることも可能です。ただし、どこのテナントのアクセスパネルにアクセスするかを明確にしたURLを書いてアクセスするようにしてください。
(https://myapps.microsoft.com/?tenantid=テナントID という感じの書きかたですね)