Developer Guideline
  • Home
  • 🧠Must you know
    • Algorithm
    • Architecture
      • API
    • Comparison
      • ID Token vs Access Token
      • Lazy Loading vs Eager Loading
      • Morphs vs Foreign Key
      • UUID vs ULID
      • GraphQL vs REST
      • Cache vs CDN
      • Concurrency vs Parallelism
      • Null vs Not Null
    • Diagram
      • CI/CD Pipeline
      • High Performance Culture
  • ☂️Laravel
    • Template
      • Template System Check in Route on Laravel
      • Template Function in FormController on Laravel
      • Template Route call FormController on Laravel
      • Template Route Prefix Name on Laravel
      • Template Basic and Custom Pagination on Laravel
      • Template PHP Artisan Command
      • Template Route for App Environment
    • Feature
      • Data Type
      • Mailables
      • Rules
    • Package
    • Document
  • 🫖Collaboration Agreement
    • Naming Convention
      • Naming Convention for Git Branch
      • Naming Convention for Environment Variable
    • Rule
      • Rule of Commit Message
      • Semantic Versioning
  • 🦣Project Manager
    • Requirements
      • System Requirements
      • Technical Requirements
      • Functional Requirements
Powered by GitBook
On this page
  • Type Token
  • ID Token
  • JWT Token ( Encode )
  • JWT Token ( Decode )
  • Access Token
  1. Must you know
  2. Comparison

ID Token vs Access Token

PreviousComparisonNextLazy Loading vs Eager Loading

Last updated 9 months ago

หากพูดถึง Token ที่ใช้กันในปัจจุบัน หลายคนคงเคยใช้ JSON Web Token (JWT) กับ OAuth Token แต่เชื่อว่าคงมีหลายคนที่เคยสงสัยเหมือนกับผมว่า แล้วมันต่างกันยังไง ใช้กับกรณีใดบ้าง ก่อนอื่นต้องมาทำความรู้จักกับประเภทของ Token กันก่อน

Type Token

Authentication Token

เป็น Token ที่ใช้ในการพิสูจน์ตัวตนของผู้ใช้ในระบบ เช่น ที่เป็นไปตามข้อกำหนด OpenID Connect

Access Token

เป็น Token ที่ใช้สำหรับ Application ที่ต้องการเข้าถึงข้อมูลทรัพยากรต่าง ๆ บน Server เช่น OAuth 2.0

Session Token

เป็น Token ที่ใช้ในการเก็บข้อมูล Session ของผู้ใช้ที่ Login เข้าสู่ระบบ และทำให้ระบบรู้ว่าผู้ใช้คือใครและต้องการเข้าถึงบริการหรือข้อมูลใด

Communication Token

เป็น Token ที่ใช้ในการเข้าถึงบริการหรือเครือข่าย เช่น CSRF Token ที่ใช้ในการป้องกันการโจมตีแบบ Cross-Site Request Forgery ( CSRF )

ID Token

ใข้ในการระบุตัวตนของผู้ใช้ในระบบเท่านั้น ซึ่งก็คือ Authentication Token นั่นแหละ โดยหลังจากที่เราทำการกรอก Username และ Password ระบบจะทำการ Authentication แล้วส่ง Token กลับมา เพื่อให้ Client สามารถทำการดึงข้อมูล User Profile

JWT Token ( Encode )

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

JWT Token ( Decode )

HEADER
{
  "alg": "HS256",
  "typ": "JWT"
}
PAYLOAD
{
  "sub": "1234567890",
  "name": "John Doe",
  "iat": 1516239022
}
VERIFY SIGNATURE
HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
  your-256-bit-secret
)

Access Token

ใช้ในการเข้าถึงข้อมูลทรัพยากรต่าง ๆ บนเครื่อง Server ซึ่งก็คือ Authorization Token นั่นแหละ มักถูกส่งมาพร้อมกับ ID Token เพื่อ Allow Resource เหมาะกับการนำไปใช้กับการเข้าถึงพวก API หรือระหว่าง Service กับ Service คุยกัน

ไม่ควรกำหนด Scope ในการเข้าถึงทรัพยากรเกินความจำเป็น และในการ Implement จะต้องดูว่าจะนำไปใช้ในลักษณะใด นอกจากนี้ Access Token ไม่ใช่ Single Sign-On แต่สามารถนำไปประยุกต์ใช้ได้

Request
client_id + client_secret
Response
{
  "access_token":"MTQ0NjJkZmQ5OTM2NDE1ZTZjNGZmZjI3",
  "token_type":"Bearer",
  "expires_in":3600,
  "refresh_token":"IwOGYzYTlmM2YxOTQ5MGE3YmNmMDFkNTVk",
  "scope":"create"
}

Last updated 9 months ago

ไม่ควรใช้ ID Token เพื่อเข้าถึง API โดยตรง หรือ เข้าถึงทรัพยากรต่าง ๆ บนเครื่อง Server และควรทำตามมาตรฐานความปลอดภัย

🧠
JSON Web Token ( JWT )
Token Best Practices
ID TokensAuth0 Docs
Logo