메인 콘텐츠로 건너뛰기

Nginx

Casdoor를 신원 제공자(IdP)로 사용하여 NGINX Plus를 통해 프록시되는 애플리케이션에 대한 OpenID Connect 기반 단일 로그인을 활성화합니다.

이 가이드는 NGINX Plus에 의해 프록시되는 애플리케이션에 대한 단일 로그인(SSO)을 활성화하는 방법을 설명합니다. 해당 솔루션은 OpenID Connect를 인증 메커니즘으로 사용하며, Casdoor를 신원 제공자(IdP)로, NGINX Plus를 신뢰하는 당사자로 사용합니다.

참고: 프로젝트의 GitHub 저장소에서 NGINX Plus OpenID Connect 통합에 대한 더 많은 정보를 찾을 수 있습니다.

사전 요구 사항

다음을 가지고 있다고 가정한 지침:

  • 실행 중인 Casdoor 서버. 서버 설치 및 Docker로 시도에 대한 Casdoor 문서를 참조하십시오. Server InstallationTry with Docker.

  • NGINX Plus 구독 및 NGINX Plus R15 이상. 설치 지침은 NGINX Plus 관리 가이드를 참조하십시오.

  • NGINX Plus와 IdP 간의 상호 작용을 처리하는 데 필요한 NGINX JavaScript 모듈. NGINX Plus를 설치한 후, 운영 체제에 적합한 명령을 사용하여 모듈을 설치하십시오.

    Debian 및 Ubuntu 용:

    sudo apt install nginx-plus-module-njs

    CentOS, RHEL, Oracle Linux 용:

    sudo yum install nginx-plus-module-njs
  • 다음 지시문은 NGINX JavaScript 모듈을 로드하기 위해 최상위 ("main") 구성 컨텍스트인 /etc/nginx/nginx.conf에 포함되어야 합니다.

    load_module modules/ngx_http_js_module.so;

Casdoor 설정

참고: 다음 절차는 출판 시점의 Casdoor GUI를 반영하지만 GUI는 변경될 수 있습니다. 이 가이드를 참조로 사용하고 필요에 따라 현재 Casdoor GUI에 맞게 조정하십시오.

Casdoor GUI에서 NGINX Plus를 위한 Casdoor 클라이언트를 생성하려면 다음 단계를 따르십시오:

  1. http://your-casdoor-url.com/login/에서 Casdoor 계정에 로그인하십시오.

  2. 상단 탐색 열에서 Application을 클릭하십시오. 열리는 응용 프로그램 페이지에서 왼쪽 상단의 추가 버튼을 클릭합니다.

    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 설정

NGINX Plus를 OpenID Connect에 의존하는 당사자로 설정하려면 다음 단계를 따르십시오:

  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 웹 키(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 - 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단계에서 Client ID 필드의 값을 사용합니다.
    • map $host $oidc_client_secret - Casdoor 설정의 2단계에서 Client Secret 필드의 값을 사용합니다.
    • map $host $oidc_hmac_key - 고유하고 긴, 안전한 문구를 사용합니다.
  5. 사용 중인 NGINX Plus 버전에 기반한 JWK 파일을 구성합니다:

    • NGINX Plus R17 이상에서는 NGINX Plus가 3단계에서 지정된 jwks_uri로부터 직접 JWK 파일을 읽을 수 있습니다. /etc/nginx/conf.d/frontend.conf에 다음 변경사항을 적용합니다:
      1. auth_jwt_key_file 지시문을 주석 처리(또는 제거)합니다.
      2. auth_jwt_key_request 지시문의 주석을 해제합니다. (매개변수 /_jwks_uri는 다음 단계에서 설정할 $oidc_jwt_keyfile 변수의 값을 참조합니다.)
      3. map $host $oidc_jwt_keyfile 지시문의 "default" 매개변수를 3단계에서 얻은 jwks_uri 필드의 값으로 업데이트합니다(이 가이드에서는 http://<casdoor-server-address>/.well-known/jwks).
    • NGINX Plus R16 이하 또는 선호하는 경우, JWK 파일은 로컬 디스크에 위치해야 합니다. 다음 단계를 따릅니다:
      1. 3단계에서 지정된 JWK 파일의 JSON 내용을 로컬 파일(예: /etc/nginx/my_casdoor_jwk.json)로 복사합니다(이 가이드에서는 http://<casdoor-server-address>/.well-known/jwks).
      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 역할이 할당된 사용자의 자격 증명을 사용하여 로그인을 시도합니다.

테스트

문제 해결

문제 해결 섹션을 참조하십시오. 이 섹션은 GitHub의 nginx-openid-connect 저장소에 있습니다.