メインコンテンツにスキップ

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クライアントを作成するには、以下の手順に従ってください:

  1. あなたのCasdoorアカウントにhttp://your-casdoor-url.com/login/でログインします。

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

    addApp

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

    appName

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

    redirectURL

    注意事項:

    • 本番環境では、SSL/TLS(ポート443)の使用を強く推奨します。
    • HTTP(80)またはHTTPS(443)のデフォルトポートを使用している場合でも、ポート番号は必須です。
  4. クライアントIDクライアントシークレットフィールドの値を記録します。 NGINX Plusの設定のステップ4でNGINX Plus設定ファイルにそれらをコピーします。

    クライアント

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

    addRole

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

    roleName

  7. 上部ナビゲーションカラムでユーザーをクリックします。 開いたユーザーページで、既存のユーザーの編集をクリックするか、左上の追加ボタンをクリックして新しいユーザーを作成します。

  8. 開いた追加ページで、名前表示名を好きなように変更します(ここではuser1)。

    userName

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

    signupApp

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

    managedAcc

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

    subUsers

NGINX Plusの設定

OpenID Connect依存関係のあるパーティとしてNGINX Plusを設定するには、以下の手順に従ってください:

  1. nginx-openid-connect GitHubリポジトリのクローンを作成することから始めます:

    git clone https://github.com/nginxinc/nginx-openid-connect
  2. クローンから次のファイルを/etc/nginx/conf.dディレクトリにコピーします:

    • frontend.conf
    • openid_connect.js
    • openid_connect.server_conf
    • openid_connect_configuration.conf
  3. 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",
    "...":"...",
    }
  4. お好みのテキストエディタを使用して/etc/nginx/conf.d/openid_connect_configuration.confを開きます。 指定された値で以下のmapディレクティブの「default」パラメータ値を変更します:

    • map $host $oidc_authz_endpoint - ステップ3authorization_endpointの値を使用します(このガイドでは、https://<casdoor-server-address>/login/oauth/authorize
    • map $host $oidc_token_endpoint - ステップ3token_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 - ユニークで長く、安全なフレーズを使用します
  5. 使用しているNGINX Plusのバージョンに基づいてJWKファイルを設定します:

    • NGINX Plus R17以降では、NGINX Plusはステップ3で指定されたjwks_uriのURLから直接JWKファイルを読み取ることができます。 /etc/nginx/conf.d/frontend.confに次の変更を加えます:
      1. auth_jwt_key_fileディレクティブをコメントアウト(または削除)します。
      2. auth_jwt_key_requestディレクティブのコメントを外します。 (パラメータ/_jwks_uriは、次のステップで設定される$oidc_jwt_keyfile変数の値を参照します。)
      3. ステップ3jwks_uriフィールドから取得した値にmap $host $oidc_jwt_keyfileディレクティブの「default」パラメータを更新します(このガイドでは、http://<casdoor-server-address>/.well-known/jwks)。
    • NGINX Plus R16以前を使用している場合、または好ましい場合は、JWKファイルをローカルディスク上に配置する必要があります。 次の手順に従ってください:
      1. ステップ3で指定されたjwks_uriフィールドのJWKファイルのJSONコンテンツをローカルファイル(例:/etc/nginx/my_casdoor_jwk.json)にコピーします。
      2. /etc/nginx/conf.d/openid_connect_configuration.confで、map $host $oidc_jwt_keyfileディレクティブの「default」パラメータをローカルファイルのパスに変更します。
  6. NGINX Plus設定ファイル(通常は/etc/nginx/nginx.conf)内のuserディレクティブで指定されたユーザーがJWKファイルの読み取り権限を持っていることを確認します。

テスト

ブラウザを開き、NGINX Plusインスタンスのアドレスを入力します。 次に、NGINX Plusロールが割り当てられたユーザーの資格情報を使用してログインを試みます。

test

トラブルシューティング

GitHubのトラブルシューティングセクションを参照してください。