---
# System prepended metadata

title: BE

---

# 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
