JWT jti claim คืออะไร


jti คือ unique JWT ID ใช้ป้องกันการ replay attack ในการใช้ JWT ที่ถูก revoke ไปแล้ว โดยทาง server จะต้องทำ cache หรือ database ในการเก็บ jti คู่กับ aud (client_id) ในการทำ blacklist JWT ไม่ให้สามารถ replay attack มาได้ โดย jti จะมีค่า exp และ iat ของตัวเองเก็บใน storage โดยตั้งให้มากกว่า exp claim ของ JWT เพื่อปิดช่องว่างเวลา ที่ hacker สามารถเอา JWT ไปใช้งานได้

โดยจะต้องระมัดระวังในเรื่อง performance ให้ดี เพราะว่า client จะต้องเรียกมาเช็ค blacklist JWT เพราะฉะนั้น บางเรื่องบาง feature ที่ต้องระมัดระวังเรื่อง security เท่านั้นควรใช้งาน หรือถ้า server เราเทพมากๆ ก็ใช้ทุกจุดได้เลย แต่มันก็ดูจะไม่ต่างจาก access_token แบบเก่าซักเท่าไร ที่ต้องมา hit server ทุก request

ตัวอย่าง jwt claim ของ keycloak system

{
  "jti": "d5b7bc5c-ec7d-4bbb-9d22-669ee07a7f2c",
  "exp": 1565756977,
  "nbf": 0,
  "iat": 1565755177,
  "iss": "http://192.168.99.100:8080/auth/realms/master",
  "aud": "http://192.168.99.100:8080/auth/realms/master",
  "sub": "1c7cdc50-e237-435e-a811-38bfb4cb7b2b",
  "typ": "Refresh",
  "azp": "security-admin-console",
  "auth_time": 0,
  "session_state": "c968be85-73b4-4e4e-b5eb-ed45193d09cb",
  "scope": "profile email"
}

azp คือ Authorized party ชื่อของ client ผู้สร้าง JWT
amr คือ Authentication Methods References ไม่มี standard สำหรับ amr value ใส่เองได้เลย เป็นค่าที่บอกว่า user login ด้วยวิธีไหน เช่น password,otp,pin,facerecog,qrcode

reference1 : https://auth0.com/blog/blacklist-json-web-token-api-keys/
reference2 : https://stackoverflow.com/questions/28907831/how-to-use-jti-claim-in-a-jwt

Related posts:

This entry was posted in json web token (jwt). Bookmark the permalink.