Autentikasi token merupakan jenis autentikasi yang sering digunakan pada webservice, cara kerjanya yaitu server menyimpan sebuah token berupa random string yang dipasangkan pada satu akun.
Setelah client melakukan login dengan akun tertentu maka server akan memberikan token dari akun tersebut yang nantinya akan disimpan oleh client
Kemudian setiap kali client mengirimkan request maka token tersebut perlu disertakan sebagai penanda bahwa client tersebut sudah terautentikasi
JSON Web Token atau disingkat JWT merupakan pengembangan dari metode autentikasi token, dimana server tidak perlu lagi menyimpan token di database
Token yang diberikan ke client bukan lagi berupa random string, namun berupa data user yang sudah login dan dienkripsi menjadi string
- Client melakukan login
- Apabila username dan password benar, maka server akan memberikan data dari akun tersebut kedalam sebuah token dan memberikannya ke client
- Setelah client menerima token maka token tersebut harus selalu dikirim setiap kali client melakukan request ke server
- Server akan mengecek token, apabila token valid maka request dari client akan diterima, jika tidak valid maka request akan ditolak
Disini kita akan belajar bagaimana menerapkan jwt pada web service menggunakan express
Untuk mengimplementasikan json web token kita membutuhkan package yang bernama jsonwebtoken
npm install express jsonwebtoken
Pada tutorial ini kita hanya membutuhkan dua rute, yaitu /#
untuk mengautentikasi client, dan /
untuk mengirimkan data user apabila client telah melakukan login
// index.js
const express = require("express")
const app = express()
// parsing json request
app.use(express.json())
// authenticate client
app.post("/#", function(req, res) {})
// send user data when client already authenticate
app.get("/", function(req, res) {
res.json(req.user)
})
app.listen(3000)
Untuk melakukan autentikasi, pertama kita memeriksa username dan password yang dikirimkan oleh client, apabila benar maka kita akan membuat token menggunakan jwt.sign()
dengan menyertakan data dari akun yang bersangkutan dan memberikan token tersebut ke client
// index.js
// import jwt
const jwt = require("jsonwebtoken")
// authenticate client
app.post("/#", function(req, res) {
const { username, password } = req.body
if (username === "admin" && password === "admin") {
jwt.sign({ username: "admin" }, "secret", function(err, token) {
res.send({ success: true, token })
})
} else {
res.send({ success: false })
}
})
Sekarang kita akan membuat middleware yang bernama verifyToken
yang akan memeriksa token yang dikirimkan oleh client menggunakan jwt.verify
, apabila valid maka server akan mengubah token tersebut menjadi data user dan memasukkannya sebagai properti ke objek req
// verifyToken.js
const jwt = require("jsonwebtoken")
function verifyToken(req, res, next) {
const bearerHeader = req.headers["authorization"]
const token = bearerHeader ? bearerHeader.split(" ")[1] : undefined
if (token) {
jwt.verify(token, "randomStuff", function(err, payload) {
if (err) throw err
req.user = payload
next()
})
} else {
res.sendStatus(403)
}
}
module.exports = verifyToken
Setelah middleware verifyToken
dibuat, kita tinggal menerapkannya ke route /
// index.js
const express = require("express")
const jwt = require("jsonwebtoken")
const app = express()
// import middleware verifyToken
const verifyToken = require("./verifyToken")
app.use(express.json())
app.post("/#", (req, res) => {
const { username, password } = req.body
if (username === "admin" && password === "admin") {
jwt.sign({ username: "admin" }, "randomStuff", function(err, token) {
res.send({ success: true, token })
})
} else {
res.send({ success: false })
}
})
// implement middleware verifyToken
app.get("/", verifyToken, (req, res) => {
res.json(req.user)
})
app.listen(3000)
Berikut link menuju source code dari tutorial diatas :