Authentication - Authorization¶
- Authentication - Authorization
- Oauth2
- JWT
Authentication - Authorization¶
Concepts¶
-
Authentication
-Xác thực
: là một quá trình kiểm tra danh tính của một tài khoản đang vào trong hệ thống hiện tại thông qua một hệ thống xác thực. Đây được xem là bước ban đầu của mọi hệ thống có yếu tố người dùng. Bản chất của Authentication chính là thực hiện xác nhậnHTTP request
được gửi đến từ client. -
Authorization
-Ủy quyền
: là quá trình để xác định xem người dùng đã được xác thực có quyền truy cập vào các tài nguyên nào của hệ thống. Thườn là bước tiếp theo sau khi bước xác thực user thành công.
Classification of Authentication
:HTTP Basic Authentication
: Client sẽ gửi info được mã hóa dưới dạng Base64 trong header của request.Multi - factor Authentication (MFA)
: Xác thực đa nhân tố, tăng tính xác thưc + bảo mật:Security token
,Biometric verification
.Password - based Authentication
: xác thực dựa trên mật khẩu: strong password, hashed password, OTP, PIN
Authentication vs. Authorization¶
Authentication | Authorization |
---|---|
Bạn là ai? → Xác nhận danh tính, cấp quyền truy cập vào hệ thống | Bạn có những quyền gì? → Xác định xem bạn có được phép truy cập tài nguyên không |
Bước đầu tiên | Diễn ra sau khi authentication thành công |
Trả về lỗi 401 |
Trả về lỗi 403 |
Dùng password, OTP, PIN, 2FA/MFA, ... | Dùng tùy thuộc vào mức độ bảo mật, để xác định permissions, thường là JWT |
Transmits info thông qua ID Token |
Transmits info thông qua Access Token |
Thường được quản trị bởi giao thức OpenID Connect (OIDC) |
Thường được quản trị bởi OAuth 2.0 framework |
4 Most Used REST API Authentication Methods¶
HTTP Authentication Schemes (Basic & Bearer)
Giao thức HTTP cung cấp các Authentication Schemes
như: Basic
, Bearer
, Digest
, OAuth
v. v...
-
Basic Authentication
: Client sẽ gửi username, password được mã hóa dưới dạng Base64 trong header của request. -
Baear Authentication
: "Cấp quyền truy cập cho user mang (bearer) token này".Bearer token
sẽ cho phép truy cập đến một số tài nguyên hoặc url nhất định và thường là một chuỗi string được mã hóa, sinh ra bởi server trong lần response cái request login. -
Api Keys
-
API Keys
bổ sung các vấn đề xác thực củaHTTP Authentication
. Trong phương pháp này, một key:api-key
duy nhất được tạo ra và assigned cho mỗi user trong lần đầu tiên access tới API. Giá trịapi-key
thường được tạo từ sự kết hợp phần cứng và dữ liệu user-agent, IP của user. -
OAuth (2.0)
-
OAuth2
kết hợpAuthentication
vàAuthorization
để cho phép kiểm soát danh tính, phạm vi truy cập của người dùng hợp lệ phức tạp hơn. -
Có các phiên bản OAuth 1.0 và 1.0a, phức tạp hơn so với OAuth 2.0. Thay đổi lớn trong phiên bản 2.0 là không còn bắt buộc cái
hashed-key
trong mỗi lần request nữa, thay vào đó dùng:-
access token
: Được gửi giống nhưapi-key
, cho phép ứng dụng truy cập vào dữ liệu của người dùng,có thể hết hạn
. -
refresh token
: Để lấy một token mới, nếuaccess token
hết hạn.
-
-
OpenID Connect
-
OpenID Connect
là một tiêu chuẩn mở và là một giao thức Authentication phân cấp, Cho phép user có thể được authen bởi nhiều website sử dụng service của bên thứ 3 → Giảm được việc phải thiết lập riêng logic sign-up/login cho mỗi website, cho phép các user có thể login tới nhiều webstie ko hề liên quan tới nhau mà ko cần phải có những định danh và password riêng cho mỗi site. -
Cơ chế OpenID, dùng duy nhất
identity provider
từ bên thứ 3, hoặc server chuyên auth để quản lý password, vàprovider
này sẽconfirm identity
của user tới các website, ko có một website nào có thể biết được password củauser
→ yếu tố bảo mật rất cao. -
Trong cơ chế
OpenID Connect
, khi provider thứ 3 hoặc authentication server xác thực user thành công, nó sẽ trả về cho client một cáitoken
để client dùng cáitoken
này gửi kèm với các request trong header tới server, server sẽ giải mãtoken
này và biết được user đó có những permission gì, từ đó serve chuẩn. → dùngJWT
Oauth2¶
- OAuth là viết tắt của Open với Authentication hoặc Authorization, là sự kết hợp giữa kết hợp
Authentication
vàAuthorization
. - OAuth 2.0 - là một giao thức cho phép người dùng có thể cấp quyền truy cập ứng dụng hoặc trang web của bên thứ ba vào các tài nguyên được bảo vệ của của họ mà không nhất thiết phải tiết lộ thông tin đăng nhập hoặc thậm chí danh tính của họ.
1. Roles¶
Trong OAuth2
định nghĩa 4 vai trò:
-
Resource owner
(or the End User): Là những user có khả năng cấp quyền truy cập, chủ sở hữu của tài nguyên mà ứng dụng muốn lấy. -
Resource server
(or API Gateway): Nơi lưu trữ các tài nguyên, có khả năng xử lý các request truy cập đến các tài nguyên được bảo vệ. -
Client Application
(or the Client): Là những ứng dụng bên thứ 3 muốn truy cập vào phần tài nguyên được chia sẻ với tư cách của người sở hữu (resource owner) và trước khi truy cập ứng dụng cần đượcsự ủy quyền của user
. -
Authorization server
: Làm nhiệm vụ xác thực, kiểm tra thông tin mà user gửi đến từ đó cấp quyền truy cập cho ứng dụng bằng việc sinh ra cácaccess token
. Đôi khiauthorization server
cũng chính làresource server
.
2. Authorization Grant Types¶
-
Khi
Client Application
yêu cầu ủy quyền để truy cập vàoResource Server
thông quaResource owner
. NếuResource owner
ủy quyền cho yêu cầu trên, Application sẽ nhận đượcgiấy ủy quyền
-Authorization Grant
từ phíaResource owner
. Có 4 loạiAuthorization Grant
:-
Authorization Code
: Đây là loạigiấy ủy quyền
được sử dụng như là mộtaccess tokens
(và optional làrefresh token
). Thường được sử dụng với các server-side Application. Tối ưu hóa choconfidential clients
. -
Implicit
: Được sử dụng với các Mobile App (ứng dụng chạy trên thiết bị của User) hoặc Web App (có thể hiểu là Browser App, vd Chrome Extension). Tối ưu hóa chopublic clients
. -
Client Credentials:
Sử dụng với các ứng dụng truy cập thông qua API. Tối ưu hóa choclient-only authentication
-
Resource Owner Password Credentials
: Sử dụng với các Trusted Application, kiểu như những ứng dụng về Security. Khi đóResource Owner
có mối quan hệ tin cậy vớiClient Application
vàClient Application
có khả năng lấy thông tin đăng nhập củaResource Owner
.
-
3. API Gateway¶
-
API Gateway
có thể coi là một cổng trung gian, cổng vào duy nhất tới hệ thốngmicroservices
, khi đóAPI Gateway
sẽ nhận các requests từ phía client,xác thực
vàđiều hướng
chúng đến các API cụ thể trên các behavior services. -
API Gateway
có thể được sử dụng như mộtAuthorization server
và mộtResource server
.
a. API Gateway as a Resource Server¶
- Khi
API Gateway
đóng vai trò là mộtResource server
, nó lưu trữ cácprotected resources
, đồng thời tiếp nhận và phản hồi các yêu cầu củaClient Application
trong đó bao gồm mãaccess token
.Client Application
sẽ gửiaccess token
trong Header của Request với cái field làAuthorization
sử dụngBearer authentication scheme
. Sau đóResource server
tiến hành xác thựcaccess token
, nếuaccess token
hợp lệ thìClient Application
có quyền truy cậpprotected resources
, nếu không hợp lệ, cái request sẽ bị rejects.
b. API Gateway as an Authorization Server¶
- Khi
API Gateway
hoạt động như mộtAuthorization Server
, nó sẽ nhận các yêu cầu ủy quyền từClient Application
và xử lý các tương tác giữaClient Application
,Resource server
vàResource owner
để approve cho cái request ủy quyền đó. -
Cụ thể:
API Gateway
sẽ cấp 1access token
cho cácClient Application
thay mặt choResource owner
để sử dụng trong việc xác thực các lệnh gọi API tớiResource server
.Resource server
tiếp nhậnaccess token
từ phíaClient Application
và xét:-
Nếu
Client Application
được phép truy cậpprotected resources
,Resource server
sẽ thực thi cái request này. VàAuthorization Server
, khi này đang làAPI Gateway
sẽ giữ lại thông tin về cácaccess token
mà nó phát hành, bao gồm cả thông tin người dùng (Resource owner
). KhiResource owner
xuất trìnhaccess token
choResource server
,Resource server
sẽ gửiaccess token
đếnAuthorization Server
để đảm bảo rằngaccess token
hợp lệ và cái khả năng service cho cái request này nằm trongscope
củaaccess token
.Scope
là định nghĩa của các tài nguyên màClient Application
có thể truy cập thay mặt choResource owner
. -
Nếu
Client Application
không có quyền truy cập tài nguyên,Resource server
sẽ từ chối yêu cầu.
4. OAuth 2.0 Workflow¶
Workflow của OAuth 2.0 thông qua 4 bước, được mô tả như sau:
-
- End-user đăng nhập,
Client Application
gửi yêu cầu xác thực ( kèmid token
) đến máy chủ ủy quyền để lấyaccess token
. Authorization Server
xác thực yêu cầu và tạoaccess token
choClient Application
Client Application
sử dụngaccess token
này để gửi các yêu cầu HTTP đếnAPI Gateway
.API Gateway
sau đó thực hiện như sau: a. Xác định danh tính củaClient Application
bằngclientId
. b. Tiến hành verify cáiaccess token
(locally hoặc remotely) c. Kiểm tra xem tài nguyên được yêu cầu trong cái request thuộcscope
củaaccess token
hay không. d.Kiểm tra các đối tượng đi kèm trong request.
Nếu tất cả những điều trên được xác thực, API Gateway sẽ cung cấp quyền truy cập vào protected resources
. Trong trường hợp access token
hết hạn, Authorization Server
sẽ trả về phản hồi lỗi cụ thể. Sau đó, ứng dụng khách có thể sử dụng refresh token
để yêu cầu một access token
mới. Authorization Server
sẽ trả về access token
mới để tiếp tục dùng cho việc truy cập protected resources
.
JWT¶
1. Concepts¶
JSON Web Token (JWT) is an open standard (RFC 7519) that defines a compact and self-contained way
for securely transmitting information between parties as a JSON object. This information can be verified
and trusted because it is digitally signed. JWTs can be signed using a secret (with the HMAC algorithm)
or a public/private key pair using RSA or ECDSA.
-
JWT
-JSON Web Token
là một tiêu chuẩn mở dựa trênJSON (RFC 7519)
, phương tiện đại diện cho mộttập hợp thông tin
được truyền một cáchan toàn
giữa client-server dưới dạngJSON object
. -
Tập hợp thông tin này được đại diện bởi JWT và nó
được xác minh
,bảo mật
vàđáng tin cậy
vì nó đượcdigitally signed
. -
digitally signed
bằng cách sử dụng mộtsecret-key
(đối với thuật toán HMAC) hoặcpublic/private key pair
dùng chuẩn RSA hoặc ECDSA.
Tóm lại là:
-
Dùng để truyền thông tin một cách an toàn.
-
Có phần chữ ký nên đảm bảo dữ liệu không bị thay đổi, chỉnh sửa trên đường đi.
2. JWT Structure¶
Một JWT sẽ có cấu trúc kiểu:
-
Header
: Gồm có 2 phần là: loại mã token, và thuật toán được sử dụng để sinh ra phầnSignature
. 2 phần này được define như là 1 json object và sau đó, JSON này được mã hóa Base64Url để tạo thành phần đầu tiên của JWT. -
Payload
: Chứa cácclaims
.Claims
thường chứa các thuộc tính nhưtypically
,thông tin user
và các dữ liệu bổ sung. Có 3 loại claims:registered
,public
, vàprivate
claims. Danh sách đầy đủ cácClaims
xem tại JSON Web Token Claims. Phần này cũng được định nghĩa và mã hóa tương tựHeader
. -
Signature
: Một chuỗi được mã hóa bởiheader
,payload
cùng với thuật toán mã hóa được chỉ định trong header.Signature
được sử dụng để xác minh data trongpayload
không bị thay đổi trong quá trình đi từ client-server và trong trường hợp token đượcsign
bằngprivate key
, nó cũng có thể xác minh được danh tính của người gửiJWT
.
API Gateway & JWT Usecase¶
-
API Gateway
sử dụng JWT dựa trênRSA
để cung cấp khả năng bảo vệ mạnh mẽ hơn choJWT
khiAPI Gateway
là nhà phát hànhtoken
. -
JWT chứa 1 hoặc nhiều
claims
nằm trongPayload
của JWT. -
API Gateway
trích xuất các yêu cầu từJWT
, định danh cho application và sau đó cho phép application truy cập vàoprotected resources
.
JWT Authorization Workflow¶
Workflow giữa requests
và responses
được ủy quyền, giữa end-user
, client-app
, nơi phát hành JWT
và resource server
như được mô tả trong hình sau:
-
End-user
đăng nhập,Client app
gửi yêu cầu xác thực đến API Gateway hoặc đến bất kỳ bên thứ ba nào để lấy mãJWT
. -
Nếu thông tin đăng nhập của
End-user
được gửi từClient app
hợp lệ, API Gateway sẽ tạo mãJWT
bằng các logic, thuật toán sẽ tìm hiểu bên dưới và gửiJWT
đã tạo đếnClient app
. Nếu thông tin xác thực của người dùng không hợp lệ,API Gateway
trả về một phản hồi lỗi cụ thể. -
Client app
gửiJWT
đã tạo chứa trongHeader
củarequest
header dưới dạngHTTP Bearer Authorization token
để truy cập tớiprotected resources
được bảo vệ trong API Gateway. -
API Gateway
sẽ xác thựcclient-app
trước, dựa trên thông tin lấy từ JWT, sau đó xác thực JWT bằng các thuật toán, logic và cung cấp quyền truy cập vào cácprotected resources
. Nếu xác thực không thành công, API Gateway trả về phản hồi lỗi cụ thể.