# BE
- kiểm tra tính đúng đắn của thông tin định danh có trong request
## Basic Authentication
### Flow
- Cung cấp { username, password } -> lưu db
- Lấy { username, password } -> check db
+ decode base64
### Vấn đề
- Check db ở mọi request
## SecretKey
### Flow
- Cung cấp chuỗi secretKey (duy nhất)
- Lấy token từ request
- hash(req.url+secretKey) == h
- compare chuỗi h == token ??
## SecretKey w/ timestamp
### Flow
- Cung cấp chuỗi secretKey (duy nhất)
- Lấy { ts, token } từ request
- hash(ts+req.url+secretKey) == h
- compare chuỗi h == token ??
## AccessToken
### Flow (backend có SECRET_KEY)
- Check db, kiểm tra { username, password }
- Tạo accessToken -> client
+ accessToken: encode(payload + hash(payload+SECRET_KEY))
+ payload: { ts, additional_info }
- Kiểm tra (verify) accessToken
+ decode accessToken -> { payload + signature }
+ Kiểm tra thời gian ts
+ hash(payload+SECRET_KEY) == h
+ compare h == signature ??
### Vấn đề
- Không thể tự vô hiệu hoá 1 accessToken nào -> chỉ có cách chờ accessToken tự expired
## AccessToken + RefreshToken
### Flow (backend có SECRET_KEY)
- Check db, kiểm tra { username, password }
- Tạo { accessToken, refreshToken } -> client
+ accessToken sớm expired (2p)
+ refreshToken LÂU expired, phải vô hiệu hoá được
* lưu vào db
* ko cần thuật toán hash, encode gì hết
- Kiểm tra (verify) accessToken
#### Quá trình xin accessToken mới
- Kiểm tra refreshToken (check db) -> nếu hợp lệ thì cấp accessToken-mới