Microsoft AzureのAzure Active DirectoryをOpenID Providerにする
はじめに
Microsoft AzureのAzure Active Directoryを用いて認証を利用している場合、当該認証情報を使ってアプリケーションにシングルサインオンを行うことが可能です。
Microsoft Azureの公式ドキュメントAzure Active Directory v2.0 と OpenID Connect プロトコルを参考にRelying Partyの登録を行うことで、Azure Active DirectoryがOpenID Providerとして振る舞います。
2018年5月現在ではImplicit Flowを用いたフェデレーションが可能です。
Azure Active Directoryの公開エンドポイント
Azure Active DirectoryではOpenID Connect Discoveryで定義されるMeatadataをhttps://login.microsoftonline.com/{tenant}/v2.0/.well-known/openid-configuration
のURLで公開しています。
{tenant}
に当たる部分については、example.onmicrosoft.com
のようなテナントのフレンドリドメイン名か、テナントのGUID識別子のいずれかを指定します。
Relying Partyの登録
Azure Active DirectoryをOpenID Providerとして、アプリケーションにシングルサインオンを行う場合、そのアプリケーションをRelying Partyとして登録する必要があります。
アプリ登録方法については、Microsoft Azureの公式ドキュメントv2.0 エンドポイントを使用してアプリケーションを登録する方法に記載されています。
エンタープライズアプリケーションの登録
エンタープライズアプリケーションからアプリケーションを登録することで、OpenID ConnectやSAMLを用いたシングルサインオン等の設定をほぼ自動で行えます。
登録するには、Azure Portalから「Azure Active Directory > エンタープライズ アプリケーション > 新しいアプリケーションの登録」を選択することで、エンタープライズアプリケーションのリストが表示されます
表示されたアプリケーションのリストから、連携したいアプリケーションを選択し、アプリケーション毎に指示される設定を行うことで、シングルサインオンの設定が可能となります。
アプリケーションの登録
任意のアプリケーションを登録し必要な設定を行うことで、OpenID Connectを用いたシングルサインオンの設定を行えます。
アプリケーションをRelying Partyとして登録するには、Azure Portalから「Azure Active Directory > アプリの登録 > 新しいアプリケーションの登録」を選択することで、登録画面が表示され、Relying Partyの登録を行うことができます。
登録時に必要な3つのパラメータが要求されます
- 名前: アプリケーションを示す名前
- アプリケーションの種類: Webアプリ/API または ネイティブ から選択
- サインオンURL: アプリケーション自体のURL
これらを指定して登録を行うとアプリケーションの設定を行うことが可能になります。
アプリケーションの設定を変更する場合は、アプリの登録を行う画面から、先程登録したアプリケーションを選択し「設定 > プロパティ」から編集を行います。
この際アプリケーションIDとして記載されている値がClient IDです。
また、OpenID Connectを用いてシングルサインオンを行う場合は、Redirect URIの設定が必要になります。Microsoft Azureでは、当該URIを応答URLと記載しています。
応答URLの設定は「設定 > 応答URL」から設定が可能です。こちらにRedirect URIとして許可するURIを登録します。
以上の設定を行うことで、Azure Active Directoryからアプリケーションへフェデレーションを行うための設定は完了です。
注意
Azure Active Directoryでは、OpenID Connectを用いたフェデレーションだけでなく、OAuth 2.0を用いてAPIの認可を行うことも可能です。
response_type
にcode
もしくはtoken
を利用することで、アクセストークンの発行が可能です。
2018年5月現在、Azure Active Directoryで、OpenID Connectを用いたフェデレーションを行う場合はresponse_type
にid_token
が付いていることが必須となっています。
この際response_type=code%20id_token
等のリクエストも可能ですが、このリクエストにより発行されるcodeを用いて取得できるトークンにID Tokenは含まれないためご注意ください。
OpenID Connectを用いたシングルサインオンを行うに辺り、上記の設定のみでは認証完了後に同意画面が表示されません。同意画面を表示したいアプリケーションについては、認証要求時にprompt=consent
を指定して認証要求をお送りください。