OpenID Foundation Japan

社内認証基盤から社内アプリケーションに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側に設定することで、証明書の検証を無視できます。