サーバーセキュリティネットワーク

【NGINX Plus R34】Open ID Connect連携を今までよりも簡単に実装!

NGINX Plus R34にてOIDC連携の設定がネイティブになりました。
proxyなどの設定と同様にディレクティブで設定ができるようになり、実装が非常に簡単になりましたので動作確認をしてみました。

はじめに

こんにちは、東京エレクトロンデバイスのJo Nishikawaです。

今回は、以前naraiさんのブログでも紹介していたNGINX Plus R34でリリースされた新機能であるネイティブOIDC(OpenID Connect)を試してみました。

関連記事:NGINX Plus R34 リリースについて

OIDCといえば、これまではNJSの導入やLuaスクリプト、外部モジュールが必要で、導入のハードルが高いと感じていた方も多いのではないでしょうか。 しかし、NGINX Plus R34以降ではネイティブにOIDC機能が使える(oidc_providerやauth_oidcディレクティブにて設定)ようになり、設定方法も非常にシンプルになりました。

本記事では、OSSのIdPであるKeycloakと連携し、シングルサインオン(SSO)を実現した手順をご紹介します。

また、今回利用できるようになったNGINX Plusの設定を紹介しておきたいと思います。 公式の詳細情報はこちらになります

1. oidc_provider ブロック

  • 役割:Keycloak、Auth0、Azure AD、OKTA などの IdP(Identity Provider)の接続情報をひとまとめにするブロック
  • 設定内容の例
# oidc_provider ブロック設定イメージ
oidc_provider keycloak {
    issuer        "https://provider.domain";
    client_id     "nginx-demo-app";
    client_secret "xxxxx";
}

2. auth_oidc ディレクティブ

  • 役割:実際の location や server に「この場所はOIDC認証を使って保護する」と宣言するディレクティブ
# auth_oidc ディレクティブ設定イメージ
location / {
    auth_oidc keycloak;
    proxy_pass http://backend;
}

oidc_providerauth_oidc の関係性はこちらのようなイメージになります。

項目 oidc_provider ブロック auth_oidc ディレクティブ
主な役割 IdPとの接続定義 認証の適用場所を指定
設定箇所 http/server コンテキスト location/server コンテキスト

それでは、NGINX Docsに下記の手順がございますのでそちらを参考に進めていきます。 Single Sign-On with Keycloak

以下の3ステップで動作確認を進めます。


構成概要

今回は以下の構成で検証を進めました。

名称 サーバーOS 用途 ドメイン
サーバー#1 Ubuntu 24.04 LTS NGINX Plusインストール、リバースプロキシ、OAuth Client、コンテンツ表示 test-sso.nishikawa.xxx
サーバー#2 Ubuntu 24.04 LTS Keycloakインストール、IdP(OAuth Authoraization、OAuth Resource) keycloak.nishikawa.xxx

ドメインはAレコードでそれぞれ紐付け済みで、Let’s EncryptにてSSL証明書も取得済みです。 サーバー#1にNGINX Plusを、サーバー#2にKeycloakをそれぞれ導入済です。


 

STEP 1: Keycloakへアクセスするクライアントの設定

サーバー#2のKeycloakにアクセスし、以下の設定で新しいクライアントを作成します。 詳細は割愛しますが重要な部分のみ記載します。

クライアント設定

  • クライアントID: nginx-demo-app

  • リダイレクトURI: https://test-sso.nishikawa.xxx/oidc_callback

ユーザー設定

デフォルトで存在しているadminユーザーを利用します。 アプリへのアクセス時にユーザーの情報が明示されるようにするため、以下のように設定しました。

項目 内容
ユーザー admin
ID 8989b77e-aa1b-4f77-982b-715cdc280c98 # ランダムな値
Email test@teldevice.co.jp
First name test
Last name nishikawa

設定画面はこちらになります。


 

STEP 2: NGINX Plus に OIDC 設定

サーバー#1のNGINX Plusに /etc/nginx/conf.d/oidc.conf を作成し以下のように構成します。 NGINX Plus R34からはoidc_providerauth_oidcディレクティブが利用可能となり、設定が非常にシンプルになりました。

※OSS版やR33以前ではこの設定が利用することができません。

resolver 8.8.8.8 ipv4=on valid=10s;

oidc_provider keycloak {
  issuer        https://keycloak.nishikawa.xxx/realms/master;
  client_id     nginx-demo-app;
  client_secret <Keycloakで発行されたクライアントシークレット>;
}

server {
  listen 443 ssl;
  server_name test-sso.nishikawa.xxx;

  ssl_certificate     /etc/letsencrypt/live/test-sso.nishikawa.xxx/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/test-sso.nishikawa.xxx/privkey.pem;

  location / {
      auth_oidc keycloak;
      proxy_set_header sub   $oidc_claim_sub;
      proxy_set_header email $oidc_claim_email;
      proxy_set_header name  $oidc_claim_name;

      proxy_pass http://127.0.0.1:8080;
  }
}

server {
  listen 8080;

  location / {
      return 200 "Hello, $http_name!\nEmail: $http_email\nSub: $http_sub\n";
      default_type text/plain;
  }
}

設定確認&再読み込みを実施します。

sudo nginx -t && sudo nginx -s reload

 

STEP 3: 動作確認

準備が整いましたのでブラウザで以下にアクセスします。 https://test-sso.nishikawa.xxx/

以下の画像の通り、Keycloakのログイン画面が表示されるので、adminユーザーでログインします。

ログインに成功しましたのでNGINX Plusで設定した応答内容が表示されました。

Keycloakで設定したユーザー情報も無事に表示できています。

非常に短いSTEPでOIDCによるSSOの確認ができました!


まとめ

今回、NGINX Plus R34の新機能「ネイティブOIDC」を使い、Keycloakと連携したSSO環境を構築しました。 今までは構築や設定が複雑だったOIDC連携も、少ない手順で実現できるようになったのは非常に大きな進化です。

アプリケーションが多様化している現代ではSSOは非常に有効な設定かと思います。 NGINX Plusでは元々機能として備わっていましたが、今回のアップデートでより使いやすくなりましたので是非お試しいただければと思います。

今回は以上となります。また次回のブログでお会いしましょう!

この記事に関連する製品・サービス

この記事に関連する記事