Nginx
Casdoorをアイデンティティプロバイダ(IdP)として使用し、NGINX PlusによってプロキシされたアプリケーションのOpenID Connectベースのシングルサインオンを有効にします。
このガイドでは、NGINX Plusによってプロキシされたアプリケーションのシングルサインオン(SSO)を有効にする方法を説明します。 認証メカニズムとしてOpenID Connectを使用し、Casdoorをアイデンティティプロバイダ(IdP)とし、NGINX Plusを依存関係のあるパーティとして使用するソリューション。
See also: NGINX Plus OpenID Connect on GitHub.
前提条件
以下のものがあることを前提としています:
-
稼働中のCasdoorサーバー。 See Server installation and Try with Docker.
-
NGINX PlusサブスクリプションおよびNGINX Plus R15以降。 インストール手順については、NGINX Plus管理ガイドを参照してく ださい。
-
NGINX JavaScriptモジュールについては、NGINX JavaScriptモジュールを参照してください。これは、NGINX PlusとIdP間のインタラクションを処理するために必要です。 NGINX Plusをインストールした後、お使いのオペレーティングシステムに適したコマンドを使用してモジュールをインストールしてください。
DebianおよびUbuntu用:
sudo apt install nginx-plus-module-njsCentOS、RHEL、Oracle Linux用:
sudo yum install nginx-plus-module-njs -
NGINX JavaScriptモジュールをロードするために、次のディレクティブを**/etc/nginx/nginx.conf**のトップレベル(「main」)設定コンテキストに含める必要があります:
load_module modules/ngx_http_js_module.so;
Casdoorの設定
**注意:**次の手順は出版時のCasdoor GUIを反映していますが、GUIは変更される可能性があります。 このガイドを参考にし、必要に応じて現在のCasdoor GUIに適応させてください。
Casdoor GUIでNGINX PlusのCasdoorクライアントを作成するには、以下の手順に従ってください:
-
Log in to your Casdoor account at
http://your-casdoor-url.com/login/. -
上部ナビゲーションカラムでアプリケーションをクリックします。 開いたアプリケーションページで、左上の追加ボタンをクリックします。

-
開いたアプリケーションの編集ページで、名前と表示名の値をSSOを有効にするアプリケーションの名前に変更します。 ここでは、NGINX Plusを使用しています。

リダイレクトURLフィールドに、ポート番号を含むNGINX PlusインスタンスのURLを入力し、/_codexchで終わるようにします(このガイドではhttps://your-site-url.com:443/_codexchです)。

注意事項:
- 本番環境では、SSL/TLS(ポート443)の使用を強く推奨します。
- HTTP(80)またはHTTPS(443)のデフォルトポートを使用している場合でも、ポート番号は必須です。
-
Record the Client ID and Client Secret; you will use them in Step 4 of Configuring NGINX Plus.

-
上部ナビゲーションカラムでロールをクリックし、開いたページの左上の追加ボタンをクリックします。

-
開いた追加ページで、名前と表示名フィールドに値を入力し(ここではnginx-casdoor-role)、保存ボタンをクリックします。

-
上部ナビゲーションカラムでユーザーをクリックします。 開いたユーザーページで、既存のユーザーの編集をクリックするか、左上の追加ボタンをクリックして新しいユーザーを作成します。
-
開いた追加ページで、名前と表示名を好きなように変更します(ここではuser1)。

サインアップアプリケーションでNGINX Plusを選択します。

管理アカウントフィールドで、アプリケーションのNGINX Plusを選択し、ユーザー名とパスワードを入力します。

-
ロールページに戻り、nginx-casdoor-role行の編集をクリックします。 開いたページで、サブユーザーフィールドで、作成したばかりのユーザー名を選択します(ここではbuilt-in/user1)。

NGINX Plusの設定
OpenID Connect依存関係のあるパーティとしてNGINX Plusを設定するには、以下の手順に従ってください:
-
nginx-openid-connect GitHubリポジトリのクローンを作成することから始めます:
git clone https://github.com/nginxinc/nginx-openid-connect -
クローンから次のファイルを**/etc/nginx/conf.d**ディレクトリにコピーします:
- frontend.conf
- openid_connect.js
- openid_connect.server_conf
- openid_connect_configuration.conf
-
Casdoor設定から認証エンドポイント、トークンエンドポイント、およびJSON Web Key(JWK)ファイルのURLを取得します。 ターミナルを開き、次の
curlコマンドを実行し、出力を指定されたpythonコマンドにパイプして読みやすい設定フォーマットを生成します。 簡潔にするために、関連するフィールドのみを表示するように出力を切り詰めました。curl http://<casdoor-server-address>/.well-known/openid-configuration | python -m json.tool
{
"authorization_endpoint": "https://<casdoor-server-address>/login/oauth/authorize",
"...":"...",
"token_endpoint": "http://<casdoor-server-address>/api/login/oauth/access_token",
"...":"...",
"jwks_uri": "http://<casdoor-server-address>/.well-known/jwks",
"...":"...",
} -
お好みのテキストエディタを使用して**/etc/nginx/conf.d/openid_connect_configuration.conf**を開きます。 指定された値で以下のmapディレクティブの「default」パラメータ値を変更します:
map $host $oidc_authz_endpoint– Use the value of theauthorization_endpointfrom Step 3 (in this guide,https://<casdoor-server-address>/login/oauth/authorize)map $host $oidc_token_endpoint– Use the value of thetoken_endpointfrom Step 3 (in this guide,http://<casdoor-server-address>/api/login/oauth/access_token)map $host $oidc_client– Use the value in the Client ID field from Step 4 of Configuring Casdoormap $host $oidc_client_secret– Use the value in the Client Secret field from Step 2 of Configuring Casdoormap $host $oidc_hmac_key- ユニークで長く、安全なフレーズを使用します
-
使用しているNGINX Plusのバージョンに基づいてJWKファイルを設定します:
- In NGINX Plus R17 and later, NGINX Plus can directly read the JWK file from the URL specified as
jwks_uriin Step 3. /etc/nginx/conf.d/frontend.confに次の変更を加えます:- auth_jwt_key_fileディレクティブをコメントアウト(または削除)します。
- auth_jwt_key_requestディレクティブのコメントを外します。 (パラメータ
/_jwks_uriは、次のステップで設定される$oidc_jwt_keyfile変数の値を参照します。) - Update the "default" parameter of the
map $host $oidc_jwt_keyfiledirective to the value obtained from thejwks_urifield in Step 3 (in this guide,http://<casdoor-server-address>/.well-known/jwks).
- NGINX Plus R16以前を使用している場合、または好ましい場 合は、JWKファイルをローカルディスク上に配置する必要があります。 次の手順に従ってください:
- Copy the JSON contents from the JWK file specified in the
jwks_urifield in Step 3 (in this guide,http://<casdoor-server-address>/.well-known/jwks) to a local file (e.g.,/etc/nginx/my_casdoor_jwk.json). - /etc/nginx/conf.d/openid_connect_configuration.confで、
map $host $oidc_jwt_keyfileディレクティブの「default」パラメータをローカルファイルのパスに変更します。
- Copy the JSON contents from the JWK file specified in the
- In NGINX Plus R17 and later, NGINX Plus can directly read the JWK file from the URL specified as
-
NGINX Plus設定ファイル(通常は**/etc/nginx/nginx.conf**)内のuserディレクティブで指定されたユーザーがJWKファイルの読み取り権限を持っていることを確認します。
テスト
ブラウザを開き、NGINX Plusインスタンスのアドレスを入力します。 次に、NGINX Plusロールが割り当てられたユーザーの資格情報を使用してログインを試みます。

トラブルシューティング
See the Troubleshooting section in the nginx-openid-connect repository.