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

โครงสร้างข้อมูลแอปพลิเคชัน

บทนำ

ใน Logto แอปพลิเคชัน หมายถึงโปรแกรมซอฟต์แวร์หรือบริการเฉพาะที่ลงทะเบียนกับแพลตฟอร์ม Logto และได้รับการอนุญาต (Authorization) ให้เข้าถึงข้อมูลผู้ใช้หรือดำเนินการแทนผู้ใช้ แอปพลิเคชันถูกใช้เพื่อระบุแหล่งที่มาของคำขอที่ส่งไปยัง Logto API รวมถึงจัดการกระบวนการการยืนยันตัวตน (Authentication) และการอนุญาต (Authorization) สำหรับผู้ใช้ที่เข้าถึงแอปพลิเคชันเหล่านั้น

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

แอปพลิเคชันยังถูกใช้ในบันทึกการตรวจสอบ (audit logs) ของ Logto เพื่อติดตามกิจกรรมของผู้ใช้และระบุภัยคุกคามหรือการละเมิดความปลอดภัยที่อาจเกิดขึ้น โดยการเชื่อมโยงการกระทำเฉพาะกับแอปพลิเคชัน Logto สามารถให้ข้อมูลเชิงลึกอย่างละเอียดเกี่ยวกับวิธีการเข้าถึงและใช้งานข้อมูล ช่วยให้องค์กรจัดการข้อกำหนดด้านความปลอดภัยและการปฏิบัติตามข้อกำหนดได้ดียิ่งขึ้น หากคุณต้องการผสานรวมแอปพลิเคชันของคุณกับ Logto ดูที่ Integrate Logto

คุณสมบัติ

Application ID

Application ID คือคีย์ที่สร้างขึ้นโดยอัตโนมัติและไม่ซ้ำกันเพื่อระบุแอปพลิเคชันของคุณใน Logto และถูกอ้างถึงว่าเป็น client id ใน OAuth 2.0

ประเภทของแอปพลิเคชัน

แอปพลิเคชัน สามารถเป็นประเภทใดประเภทหนึ่งต่อไปนี้:

  • Native app คือแอปที่ทำงานในสภาพแวดล้อมเนทีฟ เช่น แอป iOS, แอป Android
    • Device flow app คือ native app ประเภทพิเศษสำหรับอุปกรณ์ที่จำกัดการป้อนข้อมูลหรือแอปพลิเคชันแบบไม่มีหัว (เช่น สมาร์ททีวี, เกมคอนโซล, CLI tools, IoT devices) โดยใช้ OAuth 2.0 Device Authorization Grant แทน flow แบบ redirect มาตรฐาน ดู Device flow quick start สำหรับรายละเอียด
  • Single page app คือแอปที่ทำงานในเว็บเบราว์เซอร์ ซึ่งอัปเดตหน้าเว็บด้วยข้อมูลใหม่จากเซิร์ฟเวอร์โดยไม่ต้องโหลดหน้าใหม่ทั้งหมด เช่น React DOM app, Vue app
  • Traditional web app คือแอปที่เรนเดอร์และอัปเดตหน้าเว็บโดยเซิร์ฟเวอร์เพียงอย่างเดียว เช่น JSP, PHP
  • Machine-to-machine (M2M) app คือแอปพลิเคชันที่ทำงานในสภาพแวดล้อมของเครื่องเพื่อสื่อสารระหว่างบริการโดยตรงโดยไม่ต้องมีการโต้ตอบกับผู้ใช้

Application secret

Application secret คือคีย์ที่ใช้ในการยืนยันตัวตนของแอปพลิเคชันในระบบการยืนยันตัวตน โดยเฉพาะสำหรับ private clients (Traditional Web และ M2M apps) เพื่อเป็นกำแพงความปลอดภัยส่วนตัว

เคล็ดลับ:

Single Page Apps (SPAs) และ Native apps จะไม่มี App secret เนื่องจาก SPAs และ Native apps เป็น “public clients” และไม่สามารถเก็บความลับได้ (โค้ดเบราว์เซอร์หรือ app bundle สามารถถูกตรวจสอบได้) แทนที่จะใช้ app secret, Logto ปกป้องแอปเหล่านี้ด้วย PKCE, การตรวจสอบ redirect URI/CORS อย่างเข้มงวด, โทเค็นการเข้าถึง (access token) อายุสั้น และการหมุนเวียนโทเค็นรีเฟรช (refresh-token rotation)

Application name

Application name คือชื่อที่มนุษย์อ่านเข้าใจได้ของแอปพลิเคชัน และจะแสดงใน admin console

Application name เป็นองค์ประกอบสำคัญในการจัดการแอปพลิเคชันใน Logto เพราะช่วยให้ผู้ดูแลระบบสามารถระบุและติดตามกิจกรรมของแต่ละแอปพลิเคชันในแพลตฟอร์มได้อย่างง่ายดาย

บันทึก:

ควรเลือก Application name อย่างระมัดระวัง เพราะจะแสดงให้ผู้ใช้ทุกคนที่เข้าถึง admin console เห็น ควรสะท้อนวัตถุประสงค์และหน้าที่ของแอปพลิเคชันอย่างถูกต้อง และเข้าใจง่าย

คำอธิบาย (Description)

คำอธิบายสั้น ๆ ของแอปพลิเคชันจะแสดงในหน้ารายละเอียดแอปพลิเคชันใน admin console โดยมีจุดประสงค์เพื่อให้ข้อมูลเพิ่มเติมแก่ผู้ดูแลระบบ เช่น วัตถุประสงค์ ฟังก์ชันการทำงาน หรือรายละเอียดอื่น ๆ ที่เกี่ยวข้อง

Redirect URIs

Redirect URIs คือรายการของ redirect URIs ที่ถูกกำหนดไว้ล่วงหน้าสำหรับแอปพลิเคชัน เมื่อผู้ใช้ลงชื่อเข้าใช้ Logto และพยายามเข้าถึงแอปพลิเคชัน จะถูกเปลี่ยนเส้นทางไปยัง URI ที่อนุญาตซึ่งระบุไว้ใน settings ของแอป

รายการ URIs ที่อนุญาตนี้ใช้เพื่อตรวจสอบ redirect URI ที่รวมอยู่ในคำขอการอนุญาต (authorization request) ที่แอปพลิเคชันส่งไปยัง Logto ระหว่างกระบวนการยืนยันตัวตน หาก redirect URI ที่ระบุในคำขอการอนุญาตตรงกับ URI ที่อนุญาตใน settings ของแอป ผู้ใช้จะถูกเปลี่ยนเส้นทางไปยัง URI นั้นหลังจากยืนยันตัวตนสำเร็จ หากไม่อยู่ในรายการที่อนุญาต ผู้ใช้จะไม่ได้รับการเปลี่ยนเส้นทางและกระบวนการยืนยันตัวตนจะล้มเหลว

บันทึก:

ควรตรวจสอบให้แน่ใจว่าได้เพิ่ม redirect URIs ที่ถูกต้องทั้งหมดไว้ในรายการที่อนุญาตของแอปพลิเคชันใน Logto เพื่อให้ผู้ใช้สามารถเข้าถึงแอปพลิเคชันได้สำเร็จหลังจากยืนยันตัวตน

คุณสามารถดูข้อมูลเพิ่มเติมได้ที่ Redirection endpoint

ทำความเข้าใจ Redirect URIs ใน OIDC ด้วย Authorization Code Flow

รูปแบบ Wildcard

รองรับ: Single page app, Traditional web app

Redirect URIs รองรับรูปแบบ wildcard (*) สำหรับสภาพแวดล้อมแบบไดนามิก เช่น การ deploy แบบ preview โดยสามารถใช้ wildcard ในส่วน hostname และ pathname ของ HTTP/HTTPS URI

กฎ:

  • อนุญาต wildcard เฉพาะใน hostname และ pathname เท่านั้น
  • ไม่อนุญาต wildcard ใน scheme, port, query parameters หรือ hash fragments
  • wildcard ใน hostname ต้องมีอย่างน้อยหนึ่งจุด (เช่น https://*.example.com/callback)

ตัวอย่าง:

  • https://*.example.com/callback - ตรงกับทุก subdomain
  • https://preview-*.example.com/callback - ตรงกับการ deploy แบบ preview
  • https://example.com/*/callback - ตรงกับทุก path segment
ข้อควรระวัง:

Wildcard redirect URIs ไม่ใช่มาตรฐาน OIDC และอาจเพิ่มความเสี่ยงด้านความปลอดภัย ควรใช้ด้วยความระมัดระวังและควรใช้ redirect URI ที่ตรงเป๊ะเมื่อเป็นไปได้

Post sign-out redirect URIs

Post sign-out redirect URIs คือรายการ URI ที่อนุญาตไว้ล่วงหน้าสำหรับแอปพลิเคชันเพื่อเปลี่ยนเส้นทางผู้ใช้หลังจากออกจากระบบ Logto

การใช้ Allowed Post Sign-out Redirect URIs สำหรับ Logout เป็นส่วนหนึ่งของข้อกำหนด RP-Initiated (Relying Party Initiated) Logout ใน OIDC ซึ่งกำหนดวิธีมาตรฐานสำหรับแอปพลิเคชันในการเริ่มคำขอออกจากระบบสำหรับผู้ใช้ รวมถึงการเปลี่ยนเส้นทางผู้ใช้ไปยัง endpoint ที่กำหนดไว้ล่วงหน้าหลังจากออกจากระบบ

เมื่อผู้ใช้ออกจากระบบ Logto เซสชันของเขาจะถูกยุติและถูกเปลี่ยนเส้นทางไปยัง URI ที่อนุญาตใน settings ของแอปพลิเคชัน เพื่อให้แน่ใจว่าผู้ใช้จะถูกนำไปยัง endpoint ที่ได้รับอนุญาตและถูกต้องเท่านั้นหลังจากออกจากระบบ ช่วยป้องกันการเข้าถึงโดยไม่ได้รับอนุญาตและความเสี่ยงด้านความปลอดภัยที่เกี่ยวข้องกับการเปลี่ยนเส้นทางไปยัง endpoint ที่ไม่รู้จักหรือไม่ได้รับการตรวจสอบ

ดูข้อมูลเพิ่มเติมได้ที่ RP-initiated logout

CORS allowed origins

CORS (Cross-origin resource sharing) allowed origins คือรายการ origin ที่อนุญาตให้แอปพลิเคชันส่งคำขอไปยังบริการ Logto ได้ Origin ที่ไม่ได้อยู่ในรายการนี้จะไม่สามารถส่งคำขอไปยังบริการ Logto ได้

รายการ CORS allowed origins ใช้เพื่อจำกัดการเข้าถึงบริการ Logto จากโดเมนที่ไม่ได้รับอนุญาต และช่วยป้องกันการโจมตีแบบ cross-site request forgery (CSRF) โดยการระบุ origin ที่อนุญาตสำหรับแอปพลิเคชันใน Logto บริการจะมั่นใจได้ว่ามีเพียงโดเมนที่ได้รับอนุญาตเท่านั้นที่สามารถส่งคำขอได้

บันทึก:

รายการ allowed origins ควรมี origin ที่แอปพลิเคชันจะถูกให้บริการ เพื่อให้แน่ใจว่าคำขอจากแอปจะได้รับอนุญาต ในขณะที่คำขอจาก origin ที่ไม่ได้รับอนุญาตจะถูกบล็อก

OpenID provider configuration endpoint

Endpoint สำหรับ OpenID Connect Discovery

Authorization endpoint

Authorization Endpoint เป็นคำศัพท์ของ OIDC และเป็น endpoint ที่จำเป็นสำหรับเริ่มกระบวนการยืนยันตัวตนของผู้ใช้ เมื่อผู้ใช้พยายามเข้าถึงทรัพยากรหรือแอปพลิเคชันที่ได้รับการลงทะเบียนกับ Logto จะถูกเปลี่ยนเส้นทางไปยัง Authorization Endpoint เพื่อยืนยันตัวตนและขออนุญาตเข้าถึงทรัพยากรที่ร้องขอ

ดูข้อมูลเพิ่มเติมได้ที่ Authorization Endpoint

Token endpoint

Token Endpoint เป็นคำศัพท์ของ OIDC เป็น endpoint ของ API ที่ใช้โดย OIDC client เพื่อขอโทเค็นการเข้าถึง (access token), โทเค็น ID (ID token) หรือโทเค็นรีเฟรช (refresh token) จาก OIDC provider

เมื่อ OIDC client ต้องการขอโทเค็นการเข้าถึงหรือ ID token จะส่งคำขอไปยัง Token Endpoint พร้อม authorization grant ซึ่งโดยทั่วไปคือ authorization code หรือ refresh token จากนั้น Token Endpoint จะตรวจสอบ authorization grant และออก access token หรือ ID token ให้ client หาก grant ถูกต้อง

ดูข้อมูลเพิ่มเติมได้ที่ Token Endpoint

Userinfo endpoint

OpenID Connect UserInfo Endpoint

Always issue refresh token

รองรับ: Traditional web, SPA

เมื่อเปิดใช้งาน Logto จะออกโทเค็นรีเฟรช (refresh tokens) เสมอ ไม่ว่าจะมี prompt=consent ในคำขอการยืนยันตัวตนหรือไม่ หรือมี offline_access ใน scopes หรือไม่ก็ตาม

อย่างไรก็ตาม ไม่แนะนำให้ใช้แนวทางนี้หากไม่จำเป็น (โดยปกติจะใช้กับการผสานรวม OAuth ของบุคคลที่สามที่ต้องการ refresh token) เพราะไม่สอดคล้องกับ OpenID Connect และอาจก่อให้เกิดปัญหาได้

Rotate refresh token

ค่าเริ่มต้น: true

เมื่อเปิดใช้งาน Logto อาจออกโทเค็นรีเฟรชใหม่เมื่อ client ใช้ refresh token เพื่อขอโทเค็นใหม่ หาก refresh token และ app grant ยังถูกต้อง นโยบายการหมุนเวียนเริ่มต้นคือ:

  • โทเค็นรีเฟรชสามารถหมุนเวียนได้เฉพาะก่อนที่ chain ของ refresh token จะมีอายุครบหนึ่งปี นี่คือขีดจำกัดความปลอดภัยภายใน; TTL ของ refresh token หรือ TTL ของ app grant อาจหมดอายุก่อน เมื่อถึงขีดจำกัด Logto จะไม่หมุนเวียน refresh token อีกต่อไป และ refresh token ปัจจุบันจะหมดอายุเป็นครั้งสุดท้าย
  • สำหรับ public clients ที่ไม่ใช้ sender-constrained refresh tokens (เช่น Native applications ปกติและ single page applications) Logto จะหมุนเวียน refresh token ทุกครั้งที่มีการร้องขอ refresh token ในขณะที่ยังอนุญาตให้หมุนเวียนได้
  • สำหรับ client อื่น ๆ Logto จะหมุนเวียน refresh token เฉพาะเมื่อใกล้หมดอายุ (>=70% ของ TTL เดิมได้ผ่านไปแล้ว)
บันทึก:

สำหรับ public clients แนะนำอย่างยิ่งให้เปิดใช้งาน refresh token rotation เพื่อความปลอดภัย

Sender-constrained refresh tokens จะผูกกับ proof key หรือ certificate ที่ client ถืออยู่ สำหรับ SPAs ปกติ การหมุนเวียนจะออก refresh token ใหม่แต่จะไม่ขยายอายุ refresh token ใหม่ โทเค็นใหม่จะสืบทอด TTL ที่เหลือของ refresh token ก่อนหน้า

อายุของ refresh token chain:

Refresh tokens จะผูกกับ app grant โดยค่าเริ่มต้น Logto grant TTL คือ 180 วัน เมื่อ grant หมดอายุ คำขอ refresh token จะล้มเหลวและไม่สามารถใช้ refresh token เพื่อขอโทเค็นใหม่ได้อีก แม้จะเปิดใช้งาน refresh token rotation ก็ตาม

นั่นหมายความว่า อายุสูงสุดของการอนุญาตที่รองรับ refresh token จะถูกจำกัดโดย grant TTL, การเพิกถอนโดยตรง หรือการหมดอายุของ refresh token แล้วแต่กรณีใดจะเกิดก่อน

ทำความเข้าใจ refresh token rotation

Refresh token time-to-live (TTL) เป็นวัน

รองรับ: Native app, Traditional web, SPA; ค่าเริ่มต้น: 14 วัน; สูงสุด: 180 วัน

ระยะเวลาที่ refresh token สามารถใช้ขอโทเค็นการเข้าถึงใหม่ก่อนจะหมดอายุและใช้งานไม่ได้ คำขอโทเค็นจะขยาย TTL ของ refresh token เป็นค่านี้

โดยทั่วไป ค่าที่ต่ำกว่าจะดีกว่า

บันทึก:

การต่ออายุ TTL ของ refresh token ไม่รองรับใน single-page applications (SPAs) ด้วยเหตุผลด้านความปลอดภัย สำหรับ SPAs การตั้งค่านี้จะควบคุมอายุ refresh token แบบคงที่นับจากเวลาที่ออกครั้งแรก Logto จะไม่ขยาย TTL ผ่านคำขอโทเค็น และการหมุนเวียน refresh token จะไม่ป้องกัน refresh token ของ SPA จากการหมดอายุ

Refresh token TTL และ grant TTL:

Refresh token TTL ไม่ใช่ขีดจำกัดการหมดอายุเพียงอย่างเดียว Refresh tokens จะผูกกับ app grant และค่าเริ่มต้น Logto grant TTL คือ 180 วัน เมื่อ grant หมดอายุ คำขอ refresh token จะล้มเหลวแม้ว่า refresh token จะยังไม่หมดอายุก็ตาม

สำหรับ client ที่คำขอโทเค็นจะต่ออายุ refresh token TTL, grant TTL จะเป็นอายุสูงสุดของ refresh token chain สำหรับ SPAs, refresh token TTL แบบคงที่อาจหมดอายุก่อน grant

Refresh token และ session binding:

เมื่อ refresh token ถูกออก โดยไม่มี scope offline_access ในคำขอการอนุญาต มันจะถูกผูกกับ session ของผู้ใช้ โดย session มี TTL คงที่ 14 วัน เมื่อ session หมดอายุ refresh token จะใช้งานไม่ได้ไม่ว่า TTL ของมันจะตั้งไว้เท่าใดก็ตาม

เพื่อให้ refresh token TTL มีผลเต็มที่ ต้องแน่ใจว่าได้ใส่ scope offline_access ในคำขอการอนุญาตของคุณ

Backchannel logout URI

Endpoint สำหรับ OpenID Connect backchannel logout ดู Federated sign-out: Back-channel logout สำหรับข้อมูลเพิ่มเติม

Max allowed grants (maxAllowedGrants)

maxAllowedGrants เป็นฟิลด์ระดับแอป (app-level) แบบเลือกได้ภายใต้ customClientMetadata ที่ควบคุมจำนวน grant ที่ใช้งานพร้อมกันสูงสุดต่อผู้ใช้สำหรับแอปนี้

  • ค่าเริ่มต้น: undefined (ไม่จำกัด)
  • เมื่อกำหนดค่า: ทุกครั้งที่อนุญาตสำเร็จ Logto จะตรวจสอบจำนวน grant ที่ใช้งานอยู่ทั้งหมดของผู้ใช้ในแอปนี้ (ข้ามเบราว์เซอร์และอุปกรณ์) หากเกินขีดจำกัด Logto จะเพิกถอน grant ที่เก่าที่สุด

การตั้งค่านี้มีประโยชน์เมื่อคุณต้องการจำกัดจำนวนอุปกรณ์ที่รับรองความถูกต้องพร้อมกันต่อแอป

บันทึก:

ฟิลด์นี้ไม่รองรับสำหรับ:

  • Machine-to-machine apps
  • Protected apps
  • SAML apps

ข้อมูลกำหนดเอง (Custom data)

ข้อมูลเพิ่มเติมของแอปพลิเคชันที่ไม่ได้อยู่ในคุณสมบัติที่กำหนดไว้ล่วงหน้า ผู้ใช้สามารถกำหนดฟิลด์ข้อมูลกำหนดเองตามความต้องการเฉพาะ เช่น การตั้งค่าทางธุรกิจหรือการกำหนดค่าต่าง ๆ