Authentication strategies
OAuth (Open Authorization)
- OAuth là một giao thức ủy quyền (authorization protocol) giúp ứng dụng có thể truy cập tài nguyên của người dùng trên một hệ thống khác mà không cần phải lưu trữ hoặc quản lý mật khẩu của người dùng.
Mục đích
- Cho phép một ứng dụng
Client)
truy cập vào tài nguyên (data hoặc API) của người dùng trên một dịch vụ khác(Resource Server ví dụ: Google Drive)
mà không cần chia sẻ thông tin đăng nhậppassword)
.
Cách hoạt động cơ bản
Người dùng cấp quyền:
Người dùng đồng ý cho ứng dụng Client truy cập vào tài nguyên của mình.Mã truy cập (Access Token):
Sau khi được cấp quyền, dịch vụ(Authorization Server)
cung cấp một mã truy cập(Access Token)
choClient
.-
Truy cập tài nguyên:
Ứng dụng sử dụng mã này để truy cập tài nguyên trênResource Server
. - Chú ý
Authorization Server
nơi user lấy access key rồi từ đó sẽ truy cập từResource Server (ví dụ: google drive)
- ví dụ:
Authorization Server
: https://developers.google.com hay https://developers.facebook.com/
OAuth 2.0
Chuẩn bị
- Lấy thông tin
Client ID và Client Secret
Thực hành
Quy trình:
1. Người dùng nhấn nút “Đăng nhập bằng Facebook”
- Trên website của bạn, có một nút “Login with Facebook”. Khi người dùng nhấn vào, sẽ được chuyển hướng đến
Authorization Server (Facebook OAuth Server)
củaFacebook
.
2. Website gửi yêu cầu đến Facebook Authorization Server (Facebook OAuth Server)
- Website của bạn chuyển hướng người dùng đến URL của Facebook với các thông tin sau:
Client ID:
ID của website được đăng ký với Facebook.Redirect URI:
URL trên website của bạn mà Facebook sẽ chuyển hướng về sau khi người dùng đăng nhập.Scope:
Những quyền mà bạn cần (ví dụ: email, tên, ảnh đại diện, v.v.).Response Type:
Thường làResponse Type = code
trong Authorization Code Flow.
3. Người dùng đăng nhập và cấp quyền
- Facebook yêu cầu người dùng đăng nhập (nếu họ chưa đăng nhập sẵn).
- Người dùng sẽ thấy một giao diện yêu cầu cấp quyền, ví dụ:
- “Ứng dụng này yêu cầu truy cập email, ảnh đại diện của bạn.”
- Người dùng nhấn
Đồng ý
để cấp quyền.
4. Facebook trả về mã ủy quyền (Authorization Code)
- Sau khi người dùng cấp quyền, Facebook chuyển hướng người dùng trở lại Redirect URI của website của bạn kèm theo một Authorization Code.
https://yourwebsite.com/callback?code=AUTHORIZATION_CODE
- Chú ý
- Bản thân
Authorization Code
không chứ thông tin người dùng và nó cũng gi nhớ cho 1 phiên đăng nhập của một người dùng duy nhất.
- Bản thân
5. Website đổi mã ủy quyền lấy Access Token
- Website của bạn gửi mã ủy quyền này tới Facebook Authorization Server (qua một yêu cầu bảo mật từ server-side) kèm theo:
Client ID và Client Secret
(đã được cung cấp khi bạn đăng ký ứng dụng trên Facebook).Authorization Code
nhận được ở bước trước.Redirect URI
để đảm bảo tính nhất quán.- Nếu hợp lệ,
Facebook
trả về mộtAccess Token
. - Chú ý:
Authorization Code
không chưa thông tin người dùng nhưngAuthorization Code
được cấp cho một phiên người dùng duy nhất trong quy trìnhOAuth
. nên nó sẽ trả vềAccess Token
chứa đúng thông tin người dùng đã login.
6. Website sử dụng Access Token để lấy thông tin người dùng
- Website sử dụng Access Token này để gửi yêu cầu tới Facebook API (Resource Server) để truy xuất thông tin người dùng (ví dụ: tên, email, ảnh đại diện).
7. Đăng nhập thành công
- Website nhận thông tin người dùng từ Facebook và:
- Tạo hoặc kiểm tra tài khoản người dùng trong cơ sở dữ liệu của bạn. Cho phép người dùng truy cập website như đã đăng nhập.