แนวทางปฏิบัติของ Platform SDK
Platform SDK มอบวิธีมาตรฐานในการเชื่อมต่อไคลเอนต์กับบริการ Logto บนแพลตฟอร์มเฉพาะ และช่วยเร่งกระบวนการผสานรวม
- Platform SDK ห่อหุ้ม แกนหลัก ด้วยการนำไปใช้เฉพาะแพลตฟอร์ม
- Platform SDK ควรจัดเตรียมประเภทข้อมูลพื้นฐานที่ทำให้ SDK ใช้งานง่ายขึ้น
- Platform SDK ควรถูกส่งออกเป็นคลาสชื่อ
LogtoClient
ประเภทข้อมูลพื้นฐาน
LogtoConfig
| ชื่อ | ประเภท | จำเป็น | ค่าเริ่มต้น | หมายเหตุ |
|---|---|---|---|---|
| endpoint | string | ✅ | จุดปลายทางของบริการ OIDC | |
| appId | string | ✅ | รหัสแอปพลิเคชันที่ได้จากแอปที่เราลงทะเบียนใน Logto Service | |
| scopes | string[] | [openid, offline_access, profile] | ฟิลด์นี้จะมี openid, offline_access และ profile เสมอ | |
| resources | string[] | ตัวบ่งชี้ทรัพยากรที่เราต้องการใช้ | ||
| prompt | string | consent | ค่าพรอมต์ที่ใช้ใน generateSignInUri | |
| usingPersistStorage | boolean | true | ตัดสินใจว่าจะเก็บข้อมูลรับรองบนเครื่องหรือไม่ |
*หมายเหตุ
- คุณสามารถขยาย
LogtoConfigนี้ได้หากจำเป็น usingPersistStorageมีเฉพาะใน client SDK เช่น iOS, Android และ SPA
โทเค็นการเข้าถึง (AccessToken)
| ชื่อ | ประเภท | หมายเหตุ |
|---|---|---|
| token | string | |
| scope | string | |
| expiresAt | number | ตราประทับเวลา (วินาที) |
LogtoClient
คุณสมบัติ (Properties)
logtoConfig
ประเภท
LogtoConfig
oidcConfig
ประเภท
OidcConfigResponse?
accessTokenMap
ประเภท
Map<string, AccessToken>
คีย์
- คีย์ควรถูกสร้างด้วย
scopeและresource - ค่าต่างๆ ใน
scopeควรเรียงตามตัวอักษรและเชื่อมด้วยช่องว่าง - คีย์ควรถูกสร้างตามรูปแบบ:
${scope}@${resource} - หาก
scopeหรือresourceเป็น null หรือว่าง ให้ถือว่าค่านั้นว่าง
เช่น "offline_access openid read:usr@https://logto.dev/api", "@https://logto.dev/api", "openid@", "@"
ค่า
AccessTokenซึ่งใช้พร็อพเพอร์ตี้expiresAtเพื่อระบุเวลาหมดอายุของโทเค็นการเข้าถึง
หมายเหตุ
scopeจะเป็นค่า null เสมอ เพราะเราไม่รองรับ custom scopes ใน Logto V1- เมื่อสร้างคีย์ access token เพื่อเก็บ access token:
scopeจะเป็นค่า null เสมอ- ถ้า access token ไม่ใช่ jwt ให้ถือว่า
resourceเป็นค่า null - ถ้า access token เป็น jwt ให้ถอดรหัส access token และใช้ค่า
audclaim ใน payload เป็นส่วนresourceของคีย์ access token
โทเค็นรีเฟรช (refreshToken)
ประเภท
string?
หมายเหตุ
refreshToken จะถูกตั้งค่าหรืออัปเดตในสถานการณ์ต่อไปนี้:
- โหลด
refreshTokenจาก storage - เซิร์ฟเวอร์ส่งคืน
refreshTokenใน response เมื่อดึงโทเค็นสำเร็จ - ลงชื่อออก (จะถูกตั้งค่าเป็น
null)
โทเค็น ID (idToken)
ประเภท
string?
หมายเหตุ
idTokenควรถูกตรวจสอบหากมาจาก backendidTokenจะถูกตั้งค่าหรืออัปเดตในสถานการณ์ต่อไปนี้:- โหลด
idTokenจาก storage - เซิร์ฟเวอร์ส่งคืน
idTokenใน response เมื่อดึงโทเค็นสำเร็จ - ลงชื่อออก (จะถูกตั้งค่าเป็น
null)
- โหลด
เมธอด (Methods)
constructor
พารามิเตอร์
| พารามิเตอร์ | ประเภท |
|---|---|
| logtoConfig | LogtoConfig |
ประเภทที่ส่งคืน
LogtoClient
หมายเหตุ
- คุณสามารถเพิ่มพารามิเตอร์เพิ่มเติมได้หากจำเป็น
- หากเปิดใช้ usePersistStorage ใน logtoConfig, platform SDK จะมีฟังก์ชันต่อไปนี้:
- เก็บข้อมูลถาวรด้วยคีย์เฉพาะตาม
clientId - โหลด
refreshTokenและidTokenจากเครื่องในขั้นตอนเริ่มต้น - เก็บ
refreshTokenและidTokenไว้ในเครื่องเมื่อเรียกCore.fetchTokenByAuthorizationCodeและCore.fetchTokenByRefreshToken
- เก็บข้อมูลถาวรด้วยคีย์เฉพาะตาม
isAuthenticated
ใช้เพื่อตรวจสอบว่าผู้ใช้ได้รับการยืนยันตัวตนหรือไม่
สามารถกำหนดเป็น getter ได้เช่นกัน
ผู้ใช้จะถือว่าได้รับการยืนยันตัวตนเมื่อ:
- ได้รับโทเค็น ID สำเร็จ
- โหลดโทเค็น ID จากเครื่องสำเร็จ
พารามิเตอร์
ไม่มี
ประเภทที่ส่งคืน
boolean
SignIn
เมธอดนี้ควรเริ่มต้น flow การลงชื่อเข้าใช้ และ Platform SDK ควรดูแลทุกขั้นตอนที่การอนุญาตต้องการให้เสร็จสมบูรณ์ รวมถึงกระบวนการ redirect ลงชื่อเข้าใช้
ผู้ใช้จะได้รับการยืนยันตัวตนหลังจากเรียกเมธอดนี้สำเร็จ
กระบวนการลงชื่อเข้าใช้จะอาศัยฟังก์ชัน Core SDK ดังนี้:
generateSignInUriverifyAndParseCodeFromCallbackUrifetchTokenByAuthorizationCode
หมายเหตุ:
- เนื่องจาก generateSignInUri รวม resource ที่เราต้องการแล้ว จึงไม่จำเป็นต้องส่ง resource ไปที่ฟังก์ชัน fetchTokenByAuthorizationCode
พารามิเตอร์
| พารามิเตอร์ | ประเภท |
|---|---|
| redirectUri | string |
ประเภทที่ส่งคืน
void
Throws
- ข้อผิดพลาดใดๆ ที่เกิดขึ้นระหว่างกระบวนการลงชื่อเข้าใช้นี้
SignOut
กระบวนการลงชื่อออกควรดำเนินตามขั้นตอนดังนี้:
- ล้าง local storage, คุกกี้, ข้อมูลถาวร หรืออื่นๆ
- เพิกถอน refresh token ที่ได้รับผ่าน
Core.revoke(Logto service จะเพิกถอนโทเค็นที่เกี่ยวข้องทั้งหมดหาก refresh token ถูกเพิกถอน) - เปลี่ยนเส้นทางผู้ใช้ไปยัง endpoint ลงชื่อออกของ Logto เว้นแต่ขั้นตอนที่ 1 จะลบ session ของหน้าลงชื่อเข้าใช้แล้ว
หมายเหตุ:
- ในขั้นตอนที่ 2,
Core.revokeเป็น async call และจะไม่บล็อกกระบวนการลงชื่อออกแม้จะล้มเหลว - ขั้นตอนที่ 3 อาศัย
Core.generateSignOutUriเพื่อสร้าง endpoint ลงชื่อออกของ Logto
พารามิเตอร์
| พารามิเตอร์ | ประเภท | จำเป็น | ค่าเริ่มต้น |
|---|---|---|---|
| postLogoutRedirectUri | string | null |
ประเภทที่ส่งคืน
void
Throws
- ข้อผิดพลาดใดๆ ที่เกิดขึ้นระหว่างกระบวนการลงชื่อออกนี้
getAccessToken
getAccessToken จะดึง AccessToken โดยใช้ resource และ scope จาก accessTokenMap แล้วคืนค่า token ของ AccessToken นั้น
เราตั้งค่า scope เป็น null เมื่อสร้างคีย์ของ accessTokenMap เพราะเราไม่รองรับ custom scopes ใน Logto V1
หมายเหตุ
- หากไม่พบ
AccessTokenที่ตรงกัน ให้ดำเนินการCore.fetchTokenByRefreshTokenเพื่อดึงโทเค็นที่ต้องการ - หาก
accessTokenยังไม่หมดอายุ ให้คืนค่าtokenภายใน - หาก
accessTokenหมดอายุ ให้ดำเนินการCore.fetchTokenByRefreshTokenเพื่อดึงaccessTokenใหม่ อัปเดตaccessTokenMapในเครื่อง และคืนค่าtokenใหม่ - หาก
Core.fetchTokenByRefreshTokenล้มเหลว ให้แจ้งผู้ใช้ด้วย exception ที่เกิดขึ้น - หากไม่พบ refreshToken ให้แจ้งผู้ใช้ด้วย exception ว่าไม่ได้รับอนุญาต
- ต้องได้รับ refreshToken หลังลงชื่อเข้าใช้เท่านั้นจึงจะสามารถดำเนินการ
Core.fetchTokenByRefreshTokenได้
พารามิเตอร์
| พารามิเตอร์ | ประเภท | จำเป็น | ค่าเริ่มต้น |
|---|---|---|---|
| resource | string | null |
ประเภทที่ส่งคืน
string
Throws
- ผู้ใช้ไม่ได้รับการยืนยันตัวตน
resourceที่ป้อนไม่ได้ถูกตั้งค่าในlogtoConfig- ไม่พบ refresh token ก่อน
Core.fetchTokenByRefreshToken Core.fetchTokenByRefreshTokenล้มเหลว
getIdTokenClaims
getIdTokenClaims คืนอ็อบเจกต์ที่มีการอ้างสิทธิ์ (claims) ของพร็อพเพอร์ตี้ idToken
พารามิเตอร์
ไม่มี
ประเภทที่ส่งคืน
IdTokenClaims
Throws
- ผู้ใช้ไม่ได้รับการยืนยันตัวตน