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

ปกป้องทรัพยากร API ระดับองค์กร

ผสมผสานทรัพยากร API กับเทมเพลตองค์กรเพื่อจำกัดการเข้าถึง API และข้อมูลภายในแต่ละองค์กร เพื่อให้มั่นใจถึงการแยกข้อมูลในระดับผู้เช่า (tenant) สำหรับ SaaS ของคุณ

ทรัพยากร API ระดับองค์กรคืออะไร?

ทรัพยากร API ระดับองค์กร คือ endpoint หรือบริการในแอปพลิเคชันของคุณที่ ถูกกำหนดขอบเขตให้กับองค์กรใดองค์กรหนึ่ง API เหล่านี้จะบังคับใช้การอนุญาต (authorization) และการเข้าถึงตามบริบทขององค์กร เพื่อให้แน่ใจว่าผู้ใช้หรือไคลเอนต์จะเข้าถึงข้อมูลและการกระทำที่เกี่ยวข้องกับองค์กรของตนเท่านั้น

ตัวอย่างการใช้งาน

  • API สำหรับจัดการสมาชิกองค์กร, บทบาท หรือการตั้งค่า (เช่น /organizations/{organizationId}/members)
  • แดชบอร์ด, การวิเคราะห์ หรือรายงานที่จำกัดขอบเขตในแต่ละองค์กร
  • Endpoint สำหรับการเรียกเก็บเงิน, การสมัครสมาชิก หรือการตรวจสอบที่ผูกกับองค์กร
  • API ใด ๆ ที่การกระทำและข้อมูลถูกแยกตามผู้เช่า (tenant)

Logto ช่วยให้คุณรักษาความปลอดภัยให้กับ API องค์กรเหล่านี้โดยใช้ OAuth 2.1 และ RBAC พร้อมรองรับสถาปัตยกรรม SaaS แบบหลายผู้เช่า (multi-tenant)

สิทธิ์เหล่านี้ถูกจัดการผ่าน บทบาทขององค์กร (organization roles) ที่กำหนดไว้ใน เทมเพลตองค์กร ทุกองค์กรจะใช้เทมเพลตเดียวกัน เพื่อให้แน่ใจว่ามีโมเดลสิทธิ์ที่สอดคล้องกันในทุกองค์กร

วิธีการทำงานใน Logto

  • ทรัพยากร API และสิทธิ์ถูกลงทะเบียนในระดับโกลบอล: ทรัพยากร API แต่ละรายการจะถูกกำหนดด้วย resource indicator (URI) ที่ไม่ซ้ำกันและชุดสิทธิ์ (scopes) ใน Logto
  • บทบาทในระดับองค์กร: บทบาทขององค์กรถูกกำหนดในเทมเพลตองค์กร สิทธิ์ของทรัพยากร API (scopes) จะถูกกำหนดให้กับบทบาทขององค์กร ซึ่งจะถูกกำหนดให้กับผู้ใช้หรือไคลเอนต์ ภายในแต่ละองค์กร
  • การอนุญาตที่รับรู้บริบท: เมื่อไคลเอนต์ร้องขอโทเค็นการเข้าถึงพร้อมทั้ง API resource และ organization_id Logto จะออกโทเค็นที่มีทั้งบริบทขององค์กรและ API audience สิทธิ์ (scopes) ของโทเค็นจะถูกกำหนดโดยบทบาทของผู้ใช้ในองค์กรที่ระบุ
  • แยกจากทรัพยากรโกลบอล: ทรัพยากร API สามารถเข้าถึงได้ทั้งแบบมีหรือไม่มีบริบทองค์กร RBAC ขององค์กรจะถูกนำมาใช้ก็ต่อเมื่อมี organization_id ในคำขอ สำหรับ API ที่ใช้ร่วมกันระหว่างผู้ใช้ทุกคน ดู ปกป้องทรัพยากร API ระดับโกลบอล
Organization-level API resources RBAC

ภาพรวมการใช้งาน

  1. ลงทะเบียนทรัพยากร API ของคุณ และกำหนดสิทธิ์ (scopes) ใน Logto
  2. กำหนดบทบาทองค์กร ในเทมเพลตองค์กรและกำหนดสิทธิ์ API ที่เกี่ยวข้อง
  3. กำหนดบทบาท ให้กับผู้ใช้หรือไคลเอนต์ภายในแต่ละองค์กร
  4. ร้องขอโทเค็นการเข้าถึง สำหรับ API พร้อม organization_id เพื่อรวมบริบทขององค์กร
  5. ตรวจสอบโทเค็นการเข้าถึง ใน API ของคุณ โดยบังคับใช้ทั้งบริบทองค์กรและสิทธิ์

วิธีที่ Logto ใช้ RBAC ระดับองค์กร

  • หากคุณร้องขอโทเค็นการเข้าถึง โดยไม่มี organization_id จะพิจารณาเฉพาะบทบาท/สิทธิ์ระดับโกลบอลเท่านั้น
  • หากคุณร้องขอโทเค็นการเข้าถึง พร้อม organization_id Logto จะประเมินบทบาทของผู้ใช้ในองค์กรและสิทธิ์ที่เกี่ยวข้องสำหรับองค์กรนั้น
  • JWT ที่ได้จะมีทั้ง API audience (aud claim) และบริบทองค์กร (organization_id claim) โดย scopes จะถูกกรองเฉพาะที่ได้รับจากบทบาทของผู้ใช้ในองค์กรนั้น

กระบวนการอนุญาต: การยืนยันตัวตนและรักษาความปลอดภัย API ด้วยบริบทองค์กร

แผนภาพต่อไปนี้แสดงให้เห็นว่าไคลเอนต์ (เว็บ, มือถือ หรือ backend) ขอและใช้โทเค็นองค์กรเพื่อเข้าถึงทรัพยากร API ระดับองค์กรอย่างไร

โปรดทราบว่า flow นี้ไม่ได้ลงรายละเอียดพารามิเตอร์หรือ header ที่จำเป็นทั้งหมด แต่เน้นขั้นตอนสำคัญที่เกี่ยวข้อง อ่านต่อเพื่อดูตัวอย่างการใช้งานจริง

การยืนยันตัวตนของผู้ใช้ = เบราว์เซอร์/แอป. M2M = บริการ backend หรือ script ที่ใช้ client credentials + บริบทองค์กร

ขั้นตอนการใช้งาน

ลงทะเบียนทรัพยากร API ของคุณ

  1. ไปที่ Console → API resources
  2. สร้างทรัพยากร API ใหม่ (เช่น https://api.yourapp.com/org) และกำหนดสิทธิ์ (scopes)

สำหรับขั้นตอนการตั้งค่าแบบละเอียด ดู กำหนดทรัพยากร API พร้อมสิทธิ์

ตั้งค่าบทบาทองค์กร

  1. ไปที่ Console → Organization template → Organization roles
  2. สร้างบทบาทองค์กร (เช่น admin, member) และกำหนดสิทธิ์ API ให้แต่ละบทบาท
  3. กำหนดบทบาทให้กับผู้ใช้หรือไคลเอนต์ภายในแต่ละองค์กร หากยังไม่เป็นสมาชิก ให้เชิญหรือเพิ่มเข้าก่อน

สำหรับขั้นตอนการตั้งค่าแบบละเอียด ดู การใช้บทบาทองค์กร

ขอรับโทเค็นองค์กรสำหรับทรัพยากร API

ไคลเอนต์/แอปของคุณควรร้องขอโทเค็นโดยระบุทั้ง resource และ organization_id เพื่อเข้าถึง API ระดับองค์กร Logto จะออกโทเค็นองค์กรเป็น JSON Web Tokens (JWTs) คุณสามารถขอรับได้ทั้งผ่าน refresh token flow หรือ client credentials flow

Refresh token flow

เกือบทุก SDK อย่างเป็นทางการของ Logto รองรับการขอโทเค็นองค์กรผ่าน refresh token flow ได้ทันที คุณยังสามารถใช้ไลบรารี OAuth 2.0 / OIDC client มาตรฐานเพื่อใช้งาน flow นี้ได้

เมื่อเริ่มต้น Logto SDK ให้เพิ่ม urn:logto:scope:organizations และสิทธิ์ขององค์กรที่ต้องการ (scopes) ลงในพารามิเตอร์ scopes

บาง SDK ของ Logto มี scope สำหรับองค์กรที่กำหนดไว้ล่วงหน้า เช่น UserScope.Organizations ใน JavaScript SDK

บันทึก:

ตรวจสอบ organizations การอ้างสิทธิ์ (claim) ในโทเค็น ID (ID token) เพื่อรับรายการรหัสองค์กรที่ผู้ใช้สังกัด การอ้างสิทธิ์นี้จะแสดงรายการองค์กรทั้งหมดที่ผู้ใช้เป็นสมาชิก ทำให้ง่ายต่อการแสดงหรือสลับองค์กรในแอปของคุณ

เมื่อเรียก getAccessToken() ให้ระบุทั้ง API resource (resource) และรหัสองค์กร (organizationId) เพื่อขอโทเค็นองค์กร

ดูรายละเอียดของแต่ละ SDK ได้ที่ Quick starts

Client credentials flow

สำหรับกรณีเครื่องต่อเครื่อง (M2M) คุณสามารถใช้ client credentials flow เพื่อขอโทเค็นการเข้าถึงสำหรับสิทธิ์ทรัพยากร API ระดับองค์กร โดยส่ง POST ไปที่ endpoint /oidc/token ของ Logto พร้อมพารามิเตอร์องค์กร คุณสามารถขอโทเค็นองค์กรโดยใช้ client ID และ secret ของคุณ

พารามิเตอร์สำคัญที่ต้องรวมในคำขอ:

  • resource: ตัวระบุทรัพยากร API (เช่น https://api.yourapp.com/org)
  • organization_id: รหัสองค์กรที่คุณต้องการโทเค็น
  • scope: สิทธิ์ทรัพยากร API ระดับองค์กรที่คุณต้องการ (เช่น invite:member, manage:billing)

ตัวอย่างที่ไม่เป็นทางการของ token request ด้วย client credentials grant type:

POST /oidc/token HTTP/1.1
Host: your.logto.endpoint
Content-Type: application/x-www-form-urlencoded
Authorization: Basic base64(client_id:client_secret)

grant_type=client_credentials
&resource=https://api.yourapp.com/org
&organization_id=your-organization-id
&scope=invite:member manage:billing

ตรวจสอบโทเค็นองค์กร

โทเค็นองค์กร (JWTs) ที่ออกโดย Logto จะมี claim ที่ API ของคุณสามารถใช้เพื่อบังคับใช้การควบคุมการเข้าถึงระดับองค์กร

เมื่อแอปของคุณได้รับโทเค็นองค์กร คุณควร:

  • ตรวจสอบลายเซ็นของโทเค็น (โดยใช้ JWKs ของ Logto)
  • ยืนยันว่าโทเค็นไม่หมดอายุ (exp claim)
  • ตรวจสอบว่า iss (issuer) ตรงกับ endpoint Logto ของคุณ
  • ตรวจสอบว่า aud (audience) ตรงกับตัวระบุทรัพยากร API ที่คุณลงทะเบียน (เช่น https://api.yourapp.com/org)
  • ตรวจสอบ claim organization_id เพื่อให้แน่ใจว่าโทเค็นถูกจำกัดขอบเขตกับองค์กรที่ถูกต้อง
  • แยก claim scope (คั่นด้วยช่องว่าง) และตรวจสอบสิทธิ์ที่ต้องการ
  • หาก path ของ API มีรหัสองค์กร (เช่น /organizations/{organizationId}/members) ให้ตรวจสอบว่า claim organization_id ตรงกับพารามิเตอร์ path

สำหรับคู่มือแบบทีละขั้นตอนและเฉพาะภาษา ดู วิธีตรวจสอบโทเค็นการเข้าถึง

Optional: Handle user permission change

User permissions can change at any time. Because Logto issues JWTs for RBAC, permission updates only appear in newly issued tokens, and never modify existing JWTs.

Scope subset rule:

An access token can only include scopes that were requested in the original OAuth authorization flow. Even if a user gains new permissions, the token issued later can only contain a subset of the originally requested scopes. To access newly granted scopes that were not part of the initial request, the client must run a new authorization flow.

Downscoped permissions

When a user loses permissions:

  • Newly issued tokens immediately reflect the reduced scopes.
  • Existing JWTs keep the old scopes until they expire.
  • Your API should always validate scopes and rely on short token lifetimes.

If you need faster reactions, implement your own signal that tells clients to refresh their tokens.

Enlarged permissions

For organization tokens, when a user gains permissions, enlarged permissions will show up on the next issuance (refresh or token request). A new token is still required, but no full re-auth is needed unless the new scopes exceed the original request set.

Recommendations

  • Validate scopes in your API on every call.
  • Keep token expiration short.
  • Add optional notifications if you need immediate permission-change propagation.

แนวปฏิบัติที่ดีและเคล็ดลับด้านความปลอดภัย

  • ตรวจสอบบริบทองค์กรเสมอ: อย่าเชื่อถือแค่โทเค็น ให้ตรวจสอบ claim organization_id สำหรับทุก API ที่จำกัดขอบเขตองค์กร
  • ใช้ข้อจำกัด audience: ตรวจสอบ claim aud เสมอเพื่อให้แน่ใจว่าโทเค็นสำหรับองค์กรที่ต้องการ
  • ให้สิทธิ์สอดคล้องกับธุรกิจ: ใช้ชื่อที่ชัดเจนและตรงกับการกระทำจริง กำหนดเฉพาะสิ่งที่จำเป็นสำหรับแต่ละบทบาทองค์กร
  • แยกสิทธิ์ API และ non-API หากเป็นไปได้ (แต่ทั้งสองอย่างสามารถอยู่ในบทบาทเดียวกันได้)
  • กำหนดอายุโทเค็นให้สั้น: ลดความเสี่ยงหากโทเค็นรั่วไหล
  • ทบทวนเทมเพลตองค์กรของคุณเป็นประจำ: อัปเดตบทบาทและสิทธิ์เมื่อผลิตภัณฑ์ของคุณเปลี่ยนแปลง

คำถามที่พบบ่อย

ถ้าฉันไม่ใส่ organization_id ในคำขอโทเค็นจะเกิดอะไรขึ้น?

จะพิจารณาเฉพาะบทบาท/สิทธิ์ระดับโกลบอลเท่านั้น RBAC ขององค์กรจะไม่ถูกบังคับใช้

สามารถผสมสิทธิ์องค์กรและ non-organization ในบทบาทเดียวกันได้หรือไม่?

ไม่ได้ สิทธิ์องค์กร (รวมถึงสิทธิ์ API ระดับองค์กร) ถูกกำหนดโดยเทมเพลตองค์กรและไม่สามารถผสมกับสิทธิ์ API โกลบอลได้ อย่างไรก็ตาม คุณสามารถสร้างบทบาทที่มีทั้งสิทธิ์องค์กรและสิทธิ์ API ระดับองค์กรได้

อ่านเพิ่มเติม

วิธีตรวจสอบโทเค็นการเข้าถึง ปรับแต่ง token claims

กรณีศึกษา: สร้างแอป SaaS แบบหลายผู้เช่า

RFC 8707: Resource Indicators