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_addr | string | required | URL ของคาสดอร์ | ||
client_id | string | required | Client ID ในคาสดอร์ | ||
client_secret | string | required | Client secret ในคาสดอร์ | ||
callback_url | string | required | Callback 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=foo¶m2=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
หลังจากการติดตั้งที่สำเร็จ คุณต้องแน่ใจว่า:
- คาสดอร์สามารถเข้าสู่ระบบและใช้งานได้ตามปกติ
- ตั้งค่า
origin
ของคาสดอร์ (conf/app.conf) เป็นCASDOOR_HOSTNAME
ขั้นตอนที่ 2: ตั้งค่าแอปพลิเคชันคาสดอร์
- สร้างแอปพลิเคชันคาสดอร์ใหม่หรือใช้แอปพลิเคชันที่มีอยู่
- เพิ่ม URL สำหรับเปลี่ยนเส้นทาง:
http://APISIX_HOSTNAME/REDIRECTWHATYOUWANT
และแทนที่REDIRECTWHATYOUWANT
ด้วย URL ที่ต้องการเปลี่ยนเส้นทาง - เลือก "JWT-Empty" สำหรับตัวเลือกรูปแบบโทเค็น
- เพิ่มผู้ให้บริการที่ต้องการและกำหนดค่าการตั้งค่าอื่นๆ
บนหน้าการตั้งค่าแอปพลิเคชัน คุณจะพบค่า 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 ตามที่แสดงในภาพหน้าจอด้านล่าง