Nginx
Casdoorをアイデンティティプロバイダ(IdP)として使用し、NGINX PlusによってプロキシされたアプリケーションのOpenID Connectベースのシングルサインオンを有効にします。
このガイドでは、NGINX Plusによってプロキシされたアプリケーションのシングルサインオン(SSO)を有効にする方法を説明します。 認証メカニズムとしてOpenID Connectを使用し、Casdoorをアイデンティティプロバイダ(IdP)とし、NGINX Plusを依存関係のあるパーティとして使用するソリューション。
参照:NGINX Plus OpenID Connect統合に関する詳細情報は、プロジェクトのGitHubリポジトリで見つけることができます。
前提条件
以下のものがあることを前提としています:
稼働中のCasdoorサーバー。 Casdoorドキュメントを参照してください。サーバーインストールおよび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-njs
CentOS、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)のデフォルトポートを使用している場合でも、ポート番号は必須です。
クライアントIDとクライアントシークレットフィールドの値を記録します。 NGINX Plusの設定のステップ4で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ロールが割り当てられたユーザーの資格情報を使用してログインを試みます。
トラブルシューティング
GitHubのトラブルシューティングセクションを参照してください。