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

APISIX

ปัจจุบัน มี 2 วิธีในการใช้คาสดอร์เชื่อมต่อกับ APISIX ผ่านปลั๊กอิน APISIX และป้องกัน API ที่อยู่ข้างหลัง APISIX: การใช้ปลั๊กอิน Casdoor ของ APISIX หรือการใช้ปลั๊กอิน OIDC ของ APISIX

เชื่อมต่อคาสดอร์ผ่านปลั๊กอิน Casdoor ของ APISIX

ปลั๊กอินนี้ authz-casdoor สามารถป้องกัน API ที่อยู่ข้างหลัง APISIX โดยบังคับให้ทุกคำขอได้รับการตรวจสอบโดยไม่ต้องแก้ไขโค้ดของ API

วิธีการเปิดใช้งาน

คุณต้องระบุปลั๊กอินนี้เมื่อสร้างเส้นทางและให้ข้อมูลที่จำเป็นทั้งหมด นี่คือตัวอย่าง

curl "http://127.0.0.1:9180/apisix/admin/routes/1" -H "X-API-KEY: edd1c9f034335f136f87ad84b625c8f1" -X PUT -d '
{
"methods": ["GET"],
"uri": "/anything/*",
"plugins": {
"authz-casdoor": {
"endpoint_addr":"http://localhost:8000",
"callback_url":"http://localhost:9080/anything/callback",
"client_id":"7ceb9b7fda4a9061ec1c",
"client_secret":"3416238e1edf915eac08b8fe345b2b95cdba7e04"
}
},
"upstream": {
"type": "roundrobin",
"nodes": {
"httpbin.org:80": 1
}
}
}'

ในตัวอย่างนี้ เราได้สร้างเส้นทาง "/anything/*" ที่ชี้ไปที่ "httpbin.org:80" โดยใช้ API ของผู้ดูแลระบบ APISIX พร้อมกับเปิดใช้งานปลั๊กอิน "authz-casdoor" เส้นทางนี้ตอนนี้อยู่ภายใต้การป้องกันการตรวจสอบของคาสดอร์

คุณสมบัติ

ชื่อประเภทความต้องการค่าเริ่มต้นถูกต้องคำอธิบาย
endpoint_addrstringrequiredURL ของคาสดอร์
client_idstringrequiredClient ID ในคาสดอร์
client_secretstringrequiredClient secret ในคาสดอร์
callback_urlstringrequiredCallback URL ที่ใช้ในการรับ state และ code

endpoint_addr และ callback_url ไม่ควรลงท้ายด้วย '/'

ในการตั้งค่าปลั๊กอิน "authz-casdoor" เราสามารถเห็นพารามิเตอร์สี่ตัว

ตัวแรกคือ "callback_url" นี่คือ callback URL ใน OAuth2 ควรเน้นว่า callback URL นี้ ต้องเป็น "uri" ที่คุณระบุสำหรับเส้นทาง ตัวอย่างเช่น ในตัวอย่างนี้ http://localhost:9080/anything/callback อย่างชัดเจนเป็นส่วนหนึ่งของ "/anything/*" เพียงแค่วิธีนี้เท่านั้น การเยี่ยมชม callback_url จะถูกดักจับและใช้โดยปลั๊กอิน (เพื่อให้ปลั๊กอินสามารถรับ code และ state ใน OAuth2) ตรรกะของ callback_url ได้รับการพัฒนาอย่างสมบูรณ์โดยปลั๊กอิน ดังนั้นไม่จำเป็นต้องแก้ไขเซิร์ฟเวอร์เพื่อดำเนินการ callback นี้

พารามิเตอร์ที่สอง "endpoint_addr" อย่างชัดเจนคือ URL ของคาสดอร์ พารามิเตอร์ที่สามและที่สี่คือ "client_id" และ "client_secret" ซึ่งคุณสามารถรับได้จากคาสดอร์เมื่อคุณลงทะเบียนแอป

มันทำงานอย่างไร?

สมมติว่ามีผู้ใช้ใหม่ที่ไม่เคยเยี่ยมชมเส้นทางนี้มาก่อนกำลังจะเยี่ยมชม (http://localhost:9080/anything/d?param1=foom2=bar) เมื่อพิจารณาว่า "authz-casdoor" ถูกเปิดใช้งาน การเยี่ยมชมนี้จะถูกประมวลผลโดยปลั๊กอิน "authz-casdoor" ก่อน หลังจากตรวจสอบเซสชันและยืนยันว่าผู้ใช้นี้ยังไม่ได้รับการตรวจสอบ การเยี่ยมชมจะถูกดักจับ ด้วย URL ต้นฉบับที่ผู้ใช้ต้องการเยี่ยมชมถูกเก็บไว้ พวกเขาจะถูกเปลี่ยนเส้นทางไปยังหน้าเข้าสู่ระบบของคาสดอร์

หลังจากเข้าสู่ระบบสำเร็จด้วยชื่อผู้ใช้และรหัสผ่าน (หรือวิธีการใดก็ตามที่พวกเขาใช้) คาสดอร์จะเปลี่ยนเส้นทางผู้ใช้นี้ไปยัง "callback_url" พร้อมกับพารามิเตอร์ GET "code" และ "state" ที่ระบุไว้ เนื่องจาก "callback_url" เป็นที่รู้จักของปลั๊กอิน เมื่อการเยี่ยมชม "callback_url" ถูกดักจับในครั้งนี้ ตรรกะของ "Authorization code Grant Flow" ใน OAuth2 จะถูกเรียกใช้ นั่นหมายความว่าปลั๊กอินจะขอ access token เพื่อยืนยันว่าผู้ใช้นี้เข้าสู่ระบบจริงหรือไม่ หลังจากการยืนยันนี้ ปลั๊กอินจะเปลี่ยนเส้นทางผู้ใช้นี้ไปยัง URL ต้นฉบับที่พวกเขาต้องการเยี่ยมชม ซึ่งเราได้เก็บไว้ก่อนหน้านี้ สถานะการเข้าสู่ระบบจะถูกเก็บไว้ในเซสชันด้วย

ครั้งต่อไปที่ผู้ใช้นี้ต้องการเยี่ยมชม URL ที่อยู่ข้างหลังเส้นทางนี้ (ตัวอย่างเช่น http://localhost:9080/anything/d) หลังจากที่พบว่าผู้ใช้นี้ได้รับการตรวจสอบก่อนหน้านี้ ปลั๊กอินจะไม่เปลี่ยนเส้นทางผู้ใช้นี้อีกต่อไป ด้วยวิธีนี้ ผู้ใช้สามารถเยี่ยมชมสิ่งที่พวกเขาต้องการภายใต้เส้นทางนี้โดยไม่ถูกรบกวน

เชื่อมต่อคาสดอร์ผ่านปลั๊กอิน OIDC ของ APISIX

คาสดอร์สามารถใช้โปรโตคอล OIDC เพื่อเชื่อมต่อกับ APISIX และเอกสารนี้จะแสดงวิธีการทำ

ต่อไปนี้คือบางชื่อที่ใช้ในการตั้งค่า:

CASDOOR_HOSTNAME: ชื่อโดเมนหรือ IP ที่เซิร์ฟเวอร์คาสดอร์ถูกติดตั้ง

APISIX_HOSTNAME: ชื่อโดเมนหรือ IP ที่ APISIX ถูกติดตั้ง

ขั้นตอนที่ 1: ติดตั้งคาสดอร์และ APISIX

ขั้นแรก ติดตั้ง คาสดอร์ และ APISIX

หลังจากการติดตั้งที่สำเร็จ คุณต้องแน่ใจว่า:

  1. คาสดอร์สามารถเข้าสู่ระบบและใช้งานได้ตามปกติ
  2. ตั้งค่า origin ของคาสดอร์ (conf/app.conf) เป็น CASDOOR_HOSTNAME Casdoor conf

ขั้นตอนที่ 2: ตั้งค่าแอปพลิเคชันคาสดอร์

  1. สร้างแอปพลิเคชันคาสดอร์ใหม่หรือใช้แอปพลิเคชันที่มีอยู่
  2. เพิ่ม URL สำหรับเปลี่ยนเส้นทาง: http://APISIX_HOSTNAME/REDIRECTWHATYOUWANT และแทนที่ REDIRECTWHATYOUWANT ด้วย URL ที่ต้องการเปลี่ยนเส้นทาง
  3. เลือก "JWT-Empty" สำหรับตัวเลือกรูปแบบโทเค็น
  4. เพิ่มผู้ให้บริการที่ต้องการและกำหนดค่าการตั้งค่าอื่นๆ

การตั้งค่าแอปพลิเคชัน บนหน้าการตั้งค่าแอปพลิเคชัน คุณจะพบค่า Client ID และ Client Secret ตามที่แสดงในภาพด้านบน เราจะใช้พวกเขาในขั้นตอนต่อไป

เปิดเบราว์เซอร์ที่คุณชื่นชอบและเยี่ยมชม: http://CASDOOR_HOSTNAME/.well-known/openid-configuration ที่นี่คุณจะพบการตั้งค่า OIDC ของคาสดอร์

ขั้นตอนที่ 3: ตั้งค่า APISIX

APISIX มีการสนับสนุน OIDC อย่างเป็นทางการ ซึ่งได้รับการพัฒนาโดยใช้ lua-resty-openidc

คุณสามารถปรับแต่งการตั้งค่าตามเอกสาร OIDC ของ APISIX การตั้งค่าเส้นทางต่อไปนี้จะถูกใช้:

# Use your own X-Api-Key
$ curl -X POST APISIX_HOSTNAME/apisix/admin/routes -H "X-Api-Key: edd1c9f034335f136f87ad84b625c8f1" -d '{
"uri": "/get",
"name": "apisix_casdoor_test",
"plugins": {
"openid-connect": {
"client_id": "Client ID",
"client_secret": "Client Secret",
"discovery": "http://CASDOOR_HOSTNAME/.well-known/openid-configuration",
"introspection_endpoint_auth_method": "client_secret_basic",
"logout_path": "/logout",
"realm": "master",
"redirect_uri": "http://APISIX_HOSTNAME/REDIRECTWHATYOUWANT",
"bearer_only": false,
"set_id_token_header": false,
"access_token_in_authorization_header": true,
"set_access_token_header": true,
"set_userinfo_header": false,
"realm": "master"
}
},
"upstream": {
"type": "roundrobin",
"nodes": {
"httpbin.org:80": 1
}
}
}'

ตอนนี้ เยี่ยมชม http://APISIX_HOSTNAME/get และเบราว์เซอร์จะเปลี่ยนเส้นทางคุณไปยังหน้าเข้าสู่ระบบของคาสดอร์ หลังจากเข้าสู่ระบบสำเร็จ คุณจะเห็นว่ามีการส่งคำขอไปยัง httpbin.org ตามที่แสดงในภาพหน้าจอด้านล่าง APISIX_Result