社内認証基盤から社内アプリケーションにID連携する
この環境の特徴
- 社内認証基盤から、同ネットワーク内にある社内のアプリケーションにシングルサインオンできます。
- 社外から社内の認証基盤にHTTPアクセスが可能な場合はAuthorization Code Flowを用いて認証連携が行えます。
- 社外から社内の認証基盤にHTTPアクセスが不可能な場合であってもImplicit Flowを用いて認証連携が行えます。
- 認証基盤及び社内アプリケーションを、全て社内のネットワーク内で収めることが可能です。
画面イメージ
ユーザがアプリケーションにアクセスすると、OpenAMに対して認証要求が送られ、サインイン画面が表示されます。
ここで自身のメールアドレス等、指定のログインIDとパスワードを入力してLOG INを選択します。

サインイン完了後に同意画面が表示され、連携される情報が表示されます。
連携内容に同意する場合は、Allow を選択します。

同意が完了すると、アプリケーションにリダイレクトされます。
今回は結果として連携される情報を分かりやすくするために、Relying Party側ではphpinfoの情報を表示します。

バックエンドのアプリケーションには、Claimの値がOIDC_CLAIMから始まるヘッダに乗って連携されます。
Azure Active Directoryに対してscope=openidで認証要求を送ると、下記クレームが返却されます。
auth_time, realm, exp, tokenType, iat, access_token, access_token_expires
| Claim名 | 内容 |
|---|---|
| sub | アプリケーションのユーザ識別子 |
| at_hash | アクセストークンのハッシュ値 |
| auditTrackingId | 監査ログでトークンを追跡するための識別子 |
| iss | レスポンスを返した Issuer の Issuer Identifier |
| tokenName | 返却されるトークンの種類 |
| nonce | Client セッションと ID Token を紐づける文字列値 |
| aud | ID Token の想定されるオーディエンス (Audience) |
| c_hash | 認可コードのハッシュ値 |
| org.forgerock.openidconnect.ops | OpenAM内のセッションと紐付く値であり、SLO時等に利用される |
| azp | ID Token 発行対象である認可された関係者 (authorized party) |
| auth_time | End-User の認証が発生した時刻 |
| realm | 認証を行ったレルム名 |
| exp | トークンが有効である期間(終了時刻) |
| tokenType | トークンの種別 |
| iat | トークンが発行された時刻 |
Claimに加えて、access_tokenとその期限を表すaccess_token_expiresも連携されます。
scopeの値にprofileを追加すると、下記パラメータも追加で連携されます
| Claim名 | 内容 |
|---|---|
| name | ユーザのフルネーム |
| given_name | ユーザの名前 |
| family_name | ユーザの姓 |
参考実装
実装・設定上の注意点
- OpenAMを検証環境として構築していた場合等、サーバ証明書に自己署名証明書等を利用している場合にはmod_auth_openidcからのトークンリクエストが通りません。したがって、正しい証明書を当てるか、当該環境が検証環境なのであれば
OIDCSSLValidateServer Offという設定をmod_auth_openidc側に設定することで、証明書の検証を無視できます。