Azure Active Directoryから社内アプリケーションにID連携する
この環境の特徴
- クラウド上で管理しているID情報を用いて、ドメインやネットワークが違っていても社内のアプリケーションにシングルサインオンできます。
- シングルサインオンを行うにあたり、社内のアプリケーションから社外ネットワークに向けての通信が不可能な環境においても、シングルサインオンを行うことが可能になります。
- クラウド環境にID情報を置くことになるため、社内環境からユーザの情報を出したくない場合には利用できません。
画面イメージ
ユーザがアプリケーションにアクセスすると、Azure Active Directoryに対して認証要求が送られ、サインイン画面が表示されます。
ここで自身のメールアドレス等、指定のログインIDを入力して次へを選択します。
選択したユーザのパスワードを入力し、サインイン を選択します。
同意画面を表示する設定を行っている場合、サインイン完了後に同意画面が表示され、連携される情報が表示されます。
連携内容に同意する場合は、承諾 を選択します。
同意が完了すると、アプリケーションにリダイレクトされます。
今回は結果として連携される情報を分かりやすくするために、Relying Party側ではphpinfoの情報を表示します。
バックエンドのアプリケーションには、Claimの値がOIDC_CLAIM
から始まるヘッダに乗って連携されます。
Azure Active Directoryに対してscope=openid
で認証要求を送ると、下記クレームが返却されます。
Claim名 | 内容 |
---|---|
aud | ID Token の想定されるオーディエンス (Audience) |
iss | レスポンスを返した Issuer の Issuer Identifier |
iat | トークンが発行された時刻 |
nbf | トークンが有効である期間(開始時刻) |
exp | トークンが有効である期間(終了時刻) |
nonce | Client セッションと ID Token を紐づける文字列値 |
sub | アプリケーションのユーザ識別子 |
tid | トークンを発行したディレクトリ テナント識別子 |
uti | トークン発行都度採番されるID(利用用途は不明) |
ver | トークンのバージョン番号 |
scopeの値にprofile
を追加すると、下記パラメータも追加で連携されます
Claim名 | 内容 |
---|---|
name | ユーザのフルネーム |
oid | Azure Active Directory 内でのユーザの識別子 |
preferred_username | Relying Party側でIDとして利用すると思われるID(Azure Active Directory内のユーザ名が利用される) |
参考実装
実装・設定上の注意点
- Azure ADはOpenID Connectを利用する際のパラメータに、
response_type=id_token
を用いたImplicit Flowしか使えません response_type=code%20id_token
を使うこともできますが、これはcodeを用いてATを取得するためであり、トークンエンドポイントからID Tokenが返却されないため、mod_auth_openidcでエラーになってしまいます。- mod_auth_openidcを利用するにあたり、Implicit FlowのためClient Secretは不要ですが、mod_auth_openidcでは
OIDCClientSecret
パラメータは必須となっているため、ダミーの値を設定する必要があります。 - 認証要求のパラメータとして
OIDCAuthRequestParams prompt=consent
を設定することで、連携時に同意画面を表示することができます。