ข้ามไปยังเนื้อหาหลัก

Nginx

เปิดใช้งานการลงชื่อเข้าใช้เดียว (single sign-on) ที่ใช้ OpenID Connect สำหรับแอปพลิเคชันที่ถูกพร็อกซีโดย NGINX Plus โดยใช้ Casdoor เป็นผู้ให้บริการตัวตน (IdP)

คู่มือนี้อธิบายวิธีการเปิดใช้งานการลงชื่อเข้าใช้เดียว (SSO) สำหรับแอปพลิเคชันที่ถูกพร็อกซีโดย NGINX Plus โซลูชันใช้ OpenID Connect เป็นกลไกการตรวจสอบสิทธิ์ โดยใช้ Casdoor เป็นผู้ให้บริการตัวตน (IdP) และ NGINX Plus เป็นฝ่ายที่พึ่งพา

ดูเพิ่มเติม: คุณสามารถหาข้อมูลเพิ่มเติมเกี่ยวกับการรวม OpenID Connect ของ NGINX Plus ในที่เก็บโครงการ GitHub

ข้อกำหนดเบื้องต้น

คำแนะนำนี้สมมติว่าคุณมีสิ่งต่อไปนี้:

  • เซิร์ฟเวอร์ Casdoor ที่กำลังทำงาน อ้างอิงถึงเอกสารของ Casdoor สำหรับ การติดตั้งเซิร์ฟเวอร์ และ ลองใช้กับ Docker

  • การสมัครสมาชิก NGINX Plus และ NGINX Plus R15 หรือใหม่กว่า สำหรับคำแนะนำการติดตั้ง ดูที่ NGINX Plus Admin Guide

  • โมดูล JavaScript ของ NGINX ซึ่งจำเป็นสำหรับการจัดการการโต้ตอบระหว่าง 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
  • คำสั่งต่อไปนี้ควรรวมอยู่ในบริบทการกำหนดค่าระดับสูงสุด ("main") ใน /etc/nginx/nginx.conf เพื่อโหลดโมดูล JavaScript ของ NGINX:

    load_module modules/ngx_http_js_module.so;

การกำหนดค่า Casdoor

หมายเหตุ: ขั้นตอนต่อไปนี้สะท้อนถึง GUI ของ Casdoor ณ เวลาที่เผยแพร่ แต่ GUI อาจมีการเปลี่ยนแปลง ใช้คู่มือนี้เป็นแหล่งอ้างอิงและปรับให้เข้ากับ GUI ของ Casdoor ปัจจุบันตามความจำเป็น

เพื่อสร้างไคลเอนต์ Casdoor สำหรับ NGINX Plus ใน GUI ของ Casdoor ให้ทำตามขั้นตอนเหล่านี้:

  1. เข้าสู่ระบบบัญชี Casdoor ของคุณที่ http://your-casdoor-url.com/login/

  2. ในคอลัมน์นำทางด้านบน คลิก Application ในหน้า Application ที่เปิดขึ้น คลิกปุ่ม Add ที่มุมซ้ายบน

    addApp

  3. ในหน้า Edit Application ที่เปิดขึ้น แก้ไขค่าในช่อง Name และ Display name เป็นชื่อของแอปพลิเคชันที่คุณกำลังเปิดใช้งาน SSO ที่นี่ เรากำลังใช้ NGINX Plus

    appName

    ในช่อง Redirect URLs พิมพ์ URL ของอินสแตนซ์ NGINX Plus รวมถึงหมายเลขพอร์ต และลงท้ายด้วย /_codexch (ในคู่มือนี้คือ https://your-site-url.com:443/_codexch)

    redirectURL

    หมายเหตุ:

    • สำหรับการผลิต เราขอแนะนำอย่างยิ่งให้คุณใช้ SSL/TLS (พอร์ต 443)
    • หมายเลขพอร์ตเป็นสิ่งจำเป็นแม้ว่าคุณจะใช้พอร์ตมาตรฐานสำหรับ HTTP (80) หรือ HTTPS (443)
  4. บันทึกค่าในช่อง Client ID และ Client Secret คุณจะคัดลอกพวกมันเข้าไปในไฟล์การกำหนดค่าของ NGINX Plus ใน ขั้นตอนที่ 4 ของ การกำหนดค่า NGINX Plus

    ไคลเอนต์

  5. คลิก Roles ในคอลัมน์นำทางด้านบน จากนั้นคลิกปุ่ม Add ที่มุมซ้ายบนของหน้าที่เปิดขึ้น

    addRole

  6. ในหน้า Add ที่เปิดขึ้น พิมพ์ค่าในช่อง Name และ Display Name (ที่นี่คือ nginx-casdoor-role) และคลิกปุ่ม Save

    roleName

  7. ในคอลัมน์นำทางด้านบน คลิก Users ในหน้า Users ที่เปิดขึ้น คลิก Edit เพื่อแก้ไขหนึ่งในผู้ใช้ที่มีอยู่หรือคลิกปุ่ม Add ที่มุมซ้ายบนเพื่อสร้างผู้ใช้ใหม่

  8. ในหน้า Add ที่เปิดขึ้น แก้ไขช่อง Name และ Display Name ตามที่คุณต้องการ (ที่นี่คือ user1)

    userName

    เลือก NGINX Plus ในช่อง Signup application

    signupApp

    ในช่อง Managed accounts เลือก NGINX Plus ใน Application และกรอกชื่อผู้ใช้และรหัสผ่าน

    managedAcc

  9. กลับไปที่หน้า Roles และคลิก Edit ที่แถว nginx-casdoor-role ในหน้าที่เปิดขึ้นมา ในช่อง Sub users เลือกชื่อผู้ใช้ที่คุณเพิ่งสร้าง (ที่นี่คือ built-in/user1)

    subUsers

การกำหนดค่า NGINX Plus

เพื่อกำหนดค่า NGINX Plus เป็น OpenID Connect relying party ให้ทำตามขั้นตอนเหล่านี้:

  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. ดึง URL สำหรับ authorization endpoint, token endpoint และไฟล์ JSON Web Key (JWK) จากการกำหนดค่า Casdoor เปิดเทอร์มินัลและทำการ execute คำสั่ง curl ต่อไปนี้ โดย piping ผลลัพธ์ไปยังคำสั่ง 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 โดยใช้ตัวแก้ไขข้อความที่คุณชอบ ปรับค่าพารามิเตอร์ "default" สำหรับแต่ละ map directives ด้วยค่าที่ระบุ:

  5. กำหนดค่าไฟล์ JWK ตามเวอร์ชันของ NGINX Plus ที่ใช้:

    • ใน NGINX Plus R17 และหลังจากนั้น NGINX Plus สามารถอ่านไฟล์ JWK โดยตรงจาก URL ที่ระบุเป็น jwks_uri ใน ขั้นตอนที่ 3. ทำการเปลี่ยนแปลงต่อไปนี้ใน /etc/nginx/conf.d/frontend.conf:
      1. Comment out (หรือลบ) คำสั่ง auth_jwt_key_file.
      2. Uncomment คำสั่ง auth_jwt_key_request. (พารามิเตอร์ /_jwks_uri หมายถึงค่าของตัวแปร $oidc_jwt_keyfile ซึ่งจะถูกตั้งค่าในขั้นตอนถัดไป)
      3. อัปเดตพารามิเตอร์ "default" ของคำสั่ง map $host $oidc_jwt_keyfile เป็นค่าที่ได้จากฟิลด์ jwks_uri ใน ขั้นตอนที่ 3 (ในคู่มือนี้, http://<casdoor-server-address>/.well-known/jwks).
    • ใน NGINX Plus R16 และก่อนหน้านั้น หรือถ้าต้องการ ไฟล์ JWK ต้องอยู่บนดิสก์ท้องถิ่น ทำตามขั้นตอนเหล่านี้:
      1. คัดลอกเนื้อหา JSON จากไฟล์ JWK ที่ระบุในฟิลด์ jwks_uri ใน ขั้นตอนที่ 3 (ในคู่มือนี้, http://<casdoor-server-address>/.well-known/jwks) ไปยังไฟล์ท้องถิ่น (เช่น, /etc/nginx/my_casdoor_jwk.json).
      2. ใน /etc/nginx/conf.d/openid_connect_configuration.conf, เปลี่ยนพารามิเตอร์ "default" ของคำสั่ง map $host $oidc_jwt_keyfile เป็นเส้นทางของไฟล์ท้องถิ่น
  6. ตรวจสอบให้แน่ใจว่าผู้ใช้ที่ระบุในคำสั่ง user ภายในไฟล์การกำหนดค่าของ NGINX Plus (โดยปกติคือ /etc/nginx/nginx.conf) มีสิทธิ์อ่านไฟล์ JWK

การทดสอบ

เปิดเบราว์เซอร์และป้อนที่อยู่ของอินสแตนซ์ NGINX Plus ของคุณ จากนั้น พยายามเข้าสู่ระบบโดยใช้ข้อมูลประจำตัวของผู้ใช้ที่ได้รับมอบหมายบทบาท NGINX Plus

ทดสอบ

การแก้ไขปัญหา

โปรดดูที่ส่วน Troubleshooting ในที่เก็บ nginx-openid-connect บน GitHub