サイバー攻撃が巧妙化する中、ID/パスワードだけの認証では守りきれない時代になり、従来のBASIC認証などでは、限界が出てくる場面があります。
EntraIDのOIDC機能を利用したWebサイトの認証をアプリケーションに依存せずApacheの機能で実現します・
環境は、RockyLinux 10.2で行っていますが、ソースからコンパイルしているので、他のLinuxディストリビューションでも利用可能かと思います。
1.インストール
#jansson
cd /usr/local/src
curl -LO https://github.com/akheron/jansson/releases/download/v2.15.1/jansson-2.15.1.tar.gz
tar xvzf jansson-2.15.1.tar.gz
cd jansson-2.15.1
./configure
make
make install
#cjose
cd /usr/local/src
curl -LO https://github.com/cisco/cjose/archive/refs/tags/0.8.0.tar.gz
tar xvzf 0.8.0.tar.gz
cd cjose-0.8.0/
./configure --with-openssl=/lib64 --with-jansson=/usr/local/lib
make
make install
#mod_auth_openidc
cd /usr/local/src
curl -LO https://github.com/OpenIDC/mod_auth_openidc/archive/refs/tags/v2.4.20.4.tar.gz
tar xvzf v2.4.20.4.tar.gz
cd mod_auth_openidc-2.4.20.4/
./autogen.sh
export PKG_CONFIG_PATH=/usr/local/apr/lib/pkgconfig:/usr/local/lib/pkgconfig
./configure --with-apxs=/usr/local/apache2/bin/apxs
make
make install
2.パスフレーズを生成する
openssl rand -hex 32
#この出力結果を控えておく
d86d274712f91xxxx5437xxxxf237xxxx2120c4xxxx7bd6e3xxxx322abxxxx2f
3.EntraIDの設定を行う
EntraID設定画面から、アプリケーションの登録を行う
リダイレクトURLを登録する
アプリケーション(クライアントIDを控える) OIDCClientID
トークンの発行を行う OIDCClientSecret
テナントIDを確認する OIDCProviderMetadataURL
4.Apacheの設定ファイルを追加する
モジュールの読み込み
LoadModule auth_openidc_module modules/mod_auth_openidc.so
ApacheのVirtualHost設定に追加する
<VirtualHost *:443>
ServerName www.example.com
DocumentRoot /var/www/html
SSLEngine on
SSLCertificateFile /etc/pki/tls/certs/example.crt
SSLCertificateKeyFile /etc/pki/tls/private/example.key
# OpenID Connect設定
OIDCProviderMetadataURL https://login.microsoftonline.com/<テナントID>/v2.0/.well-known/openid-configuration
OIDCClientID <アプリケーション(クライアントID)>
OIDCClientSecret <発行したトークンの値>
OIDCProviderTokenEndpointAuth client_secret_post
OIDCResponseType code
OIDCScope "openid profile"
OIDCRedirectURI <EntraIDで設定したリダイレクトURI>
#2.で発行したパスフレーズを記載
OIDCCryptoPassphrase d86d274712f91xxxx5437xxxxf237xxxx2120c4xxxx7bd6e3xxxx322abxxxx2f
OIDCRemoteUserClaim preferred_username
# 認証対象
<Location /private/>
AuthType openid-connect
Require valid-user
</Location>
</VirtualHost>
注意事項
1.リダイレクトURLの不一致
EntraIDのアプリケーション登録時に登録したリダイレクトURIとApacheで設定したRedirectURIと異なるとEntraIDの認証後にエラーになる。
EntraID側の設定を変える場合「アプリの登録」→「登録したアプリケーション名」→「Authentication (Preview)
」の「リダイレクトURI」から変更を行う
2.リダイレクト専用ページの用意
今回SSOに未対応なアプリケーションを2要素認証にするためOIDCの認証を有効化したのですが、元のアプリが、index.phpもしくは、/でおわるURLのように、本来アプリケーションが1番最初に開きたいページをリダイレクト先にすると、EntraIDへのリダイレクトがエンドレスになる事象が発生しました。
この場合、redirect.htmlのような何らかのページを用意し、そのページから本来最初に見せるべきページへリンクを張るとかHTMLでリダイレクトさせると、SSOの無限リダイレクトを抑止できます。






