OpenID Foundation Japan

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を設定することで、連携時に同意画面を表示することができます。