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クライアントを作成するには、以下の手順に従ってください:
-
あなたのCasdoorアカウントに**
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- ステップ3のauthorization_endpointの値を使用します(このガイドでは、https://<casdoor-server-address>/login/oauth/authorize)map $host $oidc_token_endpoint- ステップ3のtoken_endpointの値を使用します(このガイドでは、http://<casdoor-server-address>/api/login/oauth/access_token)map $host $oidc_client- Casdoorの設定のステップ4のクライアントIDフィールドの値を使用しますmap $host $oidc_client_secret- Casdoorの設定のステップ2のクライアントシークレットフィールドの値を使用しますmap $host $oidc_hmac_key- ユニークで長く、安全なフレーズを使用します
-
使用しているNGINX Plusのバージョンに基づいてJWKファイルを設定します:
- NGINX Plus R17以降では、NGINX Plusはステップ3で指定された
jwks_uriのURLから直接JWKファイルを読み取ることが できます。 /etc/nginx/conf.d/frontend.confに次の変更を加えます:- auth_jwt_key_fileディレクティブをコメントアウト(または削除)します。
- auth_jwt_key_requestディレクティブのコメントを外します。(パラメータ
/_jwks_uriは、次のステップで設定される$oidc_jwt_keyfile変数の値を参照します。) - ステップ3の
jwks_uriフィールドから取得した値にmap $host $oidc_jwt_keyfileディレクティブの「default」パラメータを更新します(このガイドでは、http://<casdoor-server-address>/.well-known/jwks)。
- NGINX Plus R16以前を使用している場合、または好ましい場合は、JWKファイルをローカルディスク上に配置する必要があります。次の手順に従ってください:
- ステップ3で指定された
jwks_uriフィールドのJWKファイルのJSONコンテンツをローカルファイル(例:/etc/nginx/my_casdoor_jwk.json)にコピーします。 - /etc/nginx/conf.d/openid_connect_configuration.confで、
map $host $oidc_jwt_keyfileディレクティブの「default」パラメータをローカルファイルのパスに変更します。
- ステップ3で指定された
- NGINX Plus R17以降では、NGINX Plusはステップ3で指定された
-
NGINX Plus設定ファイル(通常は**/etc/nginx/nginx.conf**)内のuserディレクティブで指定されたユーザーがJWKファイルの読み取り権限を持っていることを確認します。
テスト
ブラウザを開き、NGINX Plusインスタンスのアドレスを入力します。次に、NGINX Plusロールが割り当てられたユーザーの資格情報を使用してログインを試みます。

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