ก่อนอื่นเรามาทำความรู้จัก JWT คืออะไร
JSON Web Token (JWT) เป็น open standard (RFC 7519) ที่มีขนาดกระทัดรัดและสามารถเก็บข้อมูลภายในตัว
โดยจะประกอบไปด้วย 3 ส่วน
- Header โดยทั่วไป Header ประกอบด้วยสองส่วนคือประเภทของ Token ซึ่งก็คือ JWT และอัลกอริทึ่มที่ใช้ใน verify เช่น HMAC SHA256 หรือ RSA
- Payload ส่วนนี้เป็นข้อมูลที่ต้องการส่ง โดย Predefined ที่แนะนำจะประกอบไปด้วย iss (issuer), exp (expiration time), sub (subject), aud (audience)
- Signature จะใช้ในการ Verify JWT นั้นถูกต้องหรือไม่โดยการเลือกอัลกอริทึ่มใช้จะมาจาก Header หากมีการแก้ไข Payload ระหว่างทางจะทำให้ Verify Signature ไม่ผ่าน
แล้วเราจะเริ่มเขียน JWT ด้วยภาษา Go อย่างไรดีนะ … มาเริ่มกันเลยยยยยยยย
ตัวอย่าง การ Generate และ Verify JWT ด้วยอัลกอริทึ่ม RSA256
- ทำการ generate Key ผ่าน Web online หรือใช้ command generate rsa
2. สร้าง Folder cert และ สร้างไฟล์ id_rsa, id_rsa.pub โดย file id_rsa มีข้อมูล Public key และ id_rsa.pub มีข้อมูล Public key
3. สร้างไฟล์ main.go
4. สร้าง Folder token และ File token.go
จากตัวอย่าง เราสามารถ เลือกอัลกอริทึ่ม RSA256 โดยใช้ jwt.SigningMethodRS256 หรือ RSA512 jwt.SigningMethodRS512
jwt.NewWithClaims(jwt.SigningMethodRS256, claims).SignedString(key)
jwt.NewWithClaims(jwt.SigningMethodRS512, claims).SignedString(key)
ตัวอย่าง การ Generate และ Verify JWT ด้วยอัลกอริทึ่ม SHA256
- สร้างไฟล์ main.go
2. สร้าง Folder sha และ file sha.go
กรณีที่ Token Expire
Reference
http://www.inanzzz.com/index.php/post/kdl9/creating-and-validating-a-jwt-rsa-token-in-golang
github.com/dgrijalva/jwt-go