Opi Danihelka
https://actum.cz:4000/employees
Server
Client
username, password
https://actum.cz:4000/employees
data
Server
Client
username, password
https://actum.cz:4000/employees/:email/photo
data
Server
Client
username, password
https://actum.cz:4000/login
token
Server
Client
token
https://actum.cz:4000/employees
data
Token based authentication
Save token
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6Im9kYW5paGVsa2EiLCJuYW1lIjoiT3BpIERhbmloZWxrYSIsImVtYWlsIjoib3BpLmRhbmloZWxrYUBhY3R1bS5jeiIsInJvbGUiOiJBRE1JTiIsImlhdCI6MTQ4ODUzNjAyNCwiZXhwIjoxNDkxMjE0NDI0fQ.j8oGsVPWqjnwlJGv6RZmXa2C2eAtJWBNKff00S14TQ8
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6Im9kYW5paGVsa2EiLCJuYW1lIjoiT3BpIERhbmloZWxrYSIsImVtYWlsIjoib3BpLmRhbmloZWxrYUBhY3R1bS5jeiIsInJvbGUiOiJBRE1JTiIsImlhdCI6MTQ4ODUzNjAyNCwiZXhwIjoxNDkxMjE0NDI0fQ.j8oGsVPWqjnwlJGv6RZmXa2C2eAtJWBNKff00S14TQ8
header.payload.signature
header = {
"alg": "HS256",
"typ": "JWT"
}
base64UrlEncode(header)eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
payload = {
"username": "odanihelka",
"name": "Opi Danihelka",
"email": "opi.danihelka@actum.cz",
"role": "ADMIN",
"iat": 1488536024,
"exp": 1491214424
}
base64UrlEncode(payload)eyJ1c2VybmFtZSI6Im9kYW5paGVsa2EiLCJuYW1lIjoiT3BpIERhbmloZWxrYSIsImVtYWlsIjoib3BpLmRhbmloZWxrYUBhY3R1bS5jeiIsInJvbGUiOiJBRE1JTiIsImlhdCI6MTQ4ODUzNjAyNCwiZXhwIjoxNDkxMjE0NDI0fQ
HMACSHA256(
base64UrlEncode(header) + "." + base64UrlEncode(payload),
secret
)j8oGsVPWqjnwlJGv6RZmXa2C2eAtJWBNKff00S14TQ8
verify signature of every request
keep secret in secret
JWT vs. dummy access token
https://jwt.io/