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

ข้อกำหนด Core SDK (Core SDK convention)

ข้อกำหนดพื้นฐาน

  • core ควรมีเฉพาะฟังก์ชันที่ไม่ขึ้นกับแพลตฟอร์มเท่านั้น
  • core ควรตั้งชื่อเป็น {$language} และอยู่ใต้ root directory ของ repository เช่น logto/js/js, logto/kotlin/kotlin
  • core package ควรตั้งชื่อเป็น {$language} ภายใต้ Logto scope เช่น @logto/js, io.logto.sdk:kotlin

ข้อกำหนดหลัก

Core SDK ใด ๆ ควรมี:

  • ประเภทข้อมูล (Types)
  • ฟังก์ชันอรรถประโยชน์ (Utility functions)
  • ฟังก์ชันหลัก (Core functions)

ประเภทข้อมูล (Types)

OidcConfigResponse

การตั้งค่าของผู้ให้บริการข้อมูลระบุตัวตน (Identity provider) ซึ่งสามารถดึงได้ผ่าน API /oidc/.well-known/openid-configuration

คุณสมบัติ

ชื่อประเภท
authorizationEndpointstring
tokenEndpointstring
endSessionEndpointstring
revocationEndpointstring
jwksUristring
issuerstring

CodeTokenResponse

ข้อมูลตอบกลับของ /oidc/token (โดย authorization code)

คุณสมบัติ

ชื่อประเภทจำเป็น
accessTokenstring
refreshTokenstring
idTokenstring
scopestring
expiresInnumber

RefreshTokenResponse

ข้อมูลตอบกลับของ /oidc/token (โดย refresh token) เมื่อรีเฟรชโทเค็นด้วย refresh token

คุณสมบัติ

ชื่อประเภทจำเป็น
accessTokenstring
refreshTokenstring
idTokenstring
scopestring
expiresInnumber

IdTokenClaims

การอ้างสิทธิ์ (Claims) ที่อยู่ใน id token

คุณสมบัติ

ชื่อประเภทจำเป็น
substring
audstring
expnumber
iatnumber
issstring
atHashstring
usernamestring
namestring
avatarstring

ฟังก์ชันอรรถประโยชน์ (Utility functions)

generateCodeVerifier

สร้าง code verifier
ความยาวของ code verifier ถูกกำหนดไว้ที่ 64
ค่าที่คืนกลับ ต้อง ถูกเข้ารหัสเป็นสตริง base64 ที่ปลอดภัยสำหรับ URL

อ้างอิง

พารามิเตอร์

ไม่มี

ประเภทที่คืนกลับ

string

generateCodeChallenge

สร้าง code challenge จาก code verifier
วิธีนี้จะเข้ารหัส code verifier และคืนค่าผลลัพธ์ในรูปแบบ Base64 ที่ปลอดภัยสำหรับ URL
เราใช้ algorithm การเข้ารหัสแบบ SHA-256 แบบกำหนดตายตัวใน Logto V1

อ้างอิง

พารามิเตอร์

ชื่อประเภทหมายเหตุ
codeVerifierstringสร้างโดย generateCodeVerifier

ประเภทที่คืนกลับ

string

generateState

"State" ใช้เพื่อป้องกันการโจมตีแบบ CSRF
ความยาวของ "state" ถูกกำหนดไว้ที่ 64
สตริงผลลัพธ์ที่คืนกลับ ต้อง ถูกเข้ารหัสเป็น base64 ที่ปลอดภัยสำหรับ URL

อ้างอิง

พารามิเตอร์

ไม่มี

ประเภทที่คืนกลับ

string

decodeIdToken

ถอดรหัส ID Token โดยไม่ตรวจสอบความถูกต้องของ secret
คืนค่าเป็น IdTokenClaims ซึ่งมีการอ้างสิทธิ์ (claims) ทั้งหมดในส่วน payload

พารามิเตอร์

ชื่อประเภท
tokenstring

ประเภทที่คืนกลับ

IdTokenClaims

ข้อผิดพลาด

  • token ไม่ใช่ JWT ที่ถูกต้อง

verifyIdToken

ตรวจสอบว่า ID Token ถูกต้องหรือไม่

ตรวจสอบ Signing Key

OIDC รองรับ JSON Web Key Set
ฟังก์ชันนี้รับวัตถุ JsonWebKeySet จากไลบรารีภายนอก (jose) เพื่อใช้ตรวจสอบ

// ตัวอย่าง JsonWebKeySet
{
"keys": [
{
"kty": "RSA",
"use": "sig",
"kid": "xxxx",
"e": "xxxx",
"n": "xxxx"
}
]
}

ตรวจสอบ Claims

  • ตรวจสอบว่า iss ใน ID Token ตรงกับผู้ออก (issuer) ของโทเค็นนี้
  • ตรวจสอบว่า Claim aud (ผู้รับ) เท่ากับ client ID
  • ตรวจสอบว่าเวลาปัจจุบันต้องไม่เกินเวลาหมดอายุ
  • ตรวจสอบว่าเวลาที่ออก (iat) ต้องไม่เกิน +/- 1 นาทีจากเวลาปัจจุบัน

อ้างอิง

พารามิเตอร์

ชื่อประเภท
idTokenstring
clientIdstring
issuerstring
jwksJsonWebKeySet

ประเภทที่คืนกลับ

void

ข้อผิดพลาด

  • ตรวจสอบ signing key ล้มเหลว
  • ตรวจสอบ claims ล้มเหลว

verifyAndParseCodeFromCallbackUri

ตรวจสอบว่า sign-in callbackUri ถูกต้องหรือไม่ และคืนค่า code ที่ดึงมาจาก callbackUri

ตรวจสอบ Callback URI

  • ตรวจสอบว่า callbackUri ต้องขึ้นต้นด้วย redirectUri
  • ตรวจสอบว่าไม่มี error ใน callbackUri (ดู Error Response ใน redirect URI)
  • ตรวจสอบว่า callbackUri มี state ซึ่งต้องเท่ากับค่าที่คุณระบุใน generateSignInUri
  • ตรวจสอบว่า callbackUri มีพารามิเตอร์ code ซึ่งคุณจะใช้เมื่อขอ /oidc/token (โดย refresh token)

พารามิเตอร์

ชื่อประเภท
callbackUristring
redirectUristring
statestring

ประเภทที่คืนกลับ

string

ข้อผิดพลาด

  • การตรวจสอบล้มเหลว

ฟังก์ชันหลัก (Core functions)

fetchOidcConfig

คืนค่า OidcConfigResponse โดยการร้องขอไปที่ /oidc/.well-known/openid-configuration

พารามิเตอร์

ชื่อประเภทหมายเหตุ
endpointstringจุดเชื่อมต่อบริการ OIDC

ประเภทที่คืนกลับ

OidcConfigResponse

ข้อผิดพลาด

  • ดึงข้อมูลล้มเหลว

generateSignInUri

พารามิเตอร์

ชื่อประเภทจำเป็นหมายเหตุ
authorizationEndpointstring
clientIdstring
redirectUristring
codeChallengestring
statestring
scopesstring[]การใช้งานอาจแตกต่างตามภาษา
resourcesstring[]การใช้งานอาจแตกต่างตามภาษา
promptstringค่าเริ่มต้น: consent

URL จะถูกสร้างขึ้นจาก authorizationEndpoint และมี query params ดังต่อไปนี้:

พารามิเตอร์ Query ของ Sign-In Url

คีย์ Queryจำเป็นหมายเหตุ
client_id
redirect_uri
code_challenge
code_challenge_methodกำหนดตายตัวเป็น S256
state
scopescope จะมี openid และ offline_access เสมอ แม้ input scope จะเป็น null หรือว่าง
resourceสามารถเพิ่ม resource ใน uri ได้มากกว่าหนึ่งครั้ง backend จะรวมเป็น list เช่น resource=a&resource=b
response_typeกำหนดตายตัวเป็น code
prompt

ประเภทที่คืนกลับ

string

generateSignOutUri

พารามิเตอร์

ชื่อประเภทจำเป็น
endSessionEndpointstring
idTokenstring
postLogoutRedirectUristring

URL ที่จะสร้างขึ้นจะอิงจาก endSessionEndpoint และมี query parameters ดังนี้:

พารามิเตอร์ Query ของ Sign-Out Url

คีย์ Queryจำเป็นหมายเหตุ
id_token_hintพารามิเตอร์ idToken ที่รับเข้ามา
post_logout_redirect_uriพารามิเตอร์ postLogoutRedirectUri ที่รับเข้ามา

ประเภทที่คืนกลับ

string

fetchTokenByAuthorizationCode

ดึงโทเค็น (CodeTokenResponse) โดยร้องขอไปที่ /oidc/token (โดย authorization code)

พารามิเตอร์

ชื่อประเภทจำเป็น
tokenEndpointstring
codestring
codeVerifierstring
clientIdstring
redirectUristring
resourcestring

HTTP Request

  • Endpoint: /oidc/token
  • Method: POST
  • Content-Type: application/x-www-form-urlencoded
  • Payload:
คีย์ Queryประเภทจำเป็น
grant_typestring: 'authorization_code'
codestring
code_verifierstring
client_idstring
redirect_uristring
resourcestring

ประเภทที่คืนกลับ

CodeTokenResponse

ข้อผิดพลาด

  • ดึงข้อมูลล้มเหลว

fetchTokenByRefreshToken

ดึงโทเค็น (RefreshTokenTokenResponse) ผ่าน /oidc/token (โดย refresh token)

พารามิเตอร์

ชื่อประเภทจำเป็น
tokenEndpointstring
clientIdstring
refreshTokenstring
resourcestring
scopesstring[]

HTTP Request

  • Endpoint: /oidc/token
  • Method: POST
  • Content-Type: application/x-www-form-urlencoded
  • Payload:
คีย์ Queryประเภทจำเป็นหมายเหตุ
grant_typestring: 'refresh_token'
refresh_tokenstring
client_idstring
resourcestring
scopestringนำค่าใน scopes มาต่อกันด้วยช่องว่างเพื่อสร้างสตริง scope

ประเภทที่คืนกลับ

RefreshTokenTokenResponse

ข้อผิดพลาด

  • ดึงข้อมูลล้มเหลว

revoke

ร้องขอไปยัง API /oidc/token/revocation เพื่อแจ้งเซิร์ฟเวอร์การอนุญาต (authorization server) ว่า refresh หรือ access token ที่ได้รับมาก่อนหน้านี้ไม่จำเป็นต้องใช้อีกต่อไป

พารามิเตอร์

ชื่อประเภทหมายเหตุ
revocationEndpointstring
clientIdstring
tokenstringโทเค็นที่ต้องการเพิกถอน

HTTP Request

  • Endpoint: /oidc/token/revocation
  • Method: POST
  • Content-Type: application/x-www-form-urlencoded
  • Payload:
คีย์ Queryประเภท
client_idstring
tokenstring

ประเภทที่คืนกลับ

void

ข้อผิดพลาด

  • การเพิกถอนล้มเหลว