Mở đầu
OAuth là một giao thức ủy quyền mở được sử dụng rộng rãi trong các ứng dụng web và mobile ngày nay. Nó cho phép người dùng cấp quyền cho một ứng dụng bên thứ 3 truy cập vào thông tin tài khoản của họ mà không cần tiết lộ thông tin đăng nhập.
Thay vào đó, ứng dụng sẽ yêu cầu người dùng đồng ý cấp quyền, sau đó sẽ được cung cấp một Token truy cập để thực hiện các hoạt động thay mặt họ. Các Token này cho phép truy cập có phạm vi và khoảng thời gian sử dụng được giới hạn để đảm bảo an toàn.
OAuth có nhiều ưu điểm như:
- Đăng nhập đơn giản thông qua tài khoản mạng xã hội.
- Bảo mật cao hơn vì không chia sẻ thông tin đăng nhập.
- Tích hợp dễ dàng với các nhà cung cấp dịch vụ thông qua các API được xác thực.
Với những lợi ích vượt trội đó, OAuth đã trở thành giải pháp xác thực phổ biến được sử dụng trong hầu hết các loại hình ứng dụng web, mobile hiện nay. Các bạn sử dụng Viblo, nhưng đã biết đến tính năng này chưa? Hôm nay, hãy cùng tìm hiểu tính năng hay ho này trên Viblo accounts
nhé!
Tạo OAuth App
Việc đầu tiên chúng ta cần làm đó là tạo một Oauth App mới, bạn chỉ cần truy cập vào trang https://accounts.viblo.asia/security/apps và click vào button New OAuth app
ở góc trên bên phải màn hình để tạo 1 Oauth App mới.
Bạn cần nhập đầy đủ các thông tin như:
- Display name: Tên App.
- Homepage URL: URL của App.
- Authorization callback URL: Ở bước lấy mã ủy quyền, Viblo Accounts sẽ gửi mã ủy quyền theo URL mà bạn cung cấp ở đây.
Thông tin không bắt buộc như:
- Application description.
Lấy mã ủy quyền (Get Authorization Code)
Ứng dụng của bạn cần có một button để chuyển hướng đến link http://accounts.viblo.asia/authorize?grant_type=authorization_code&client_id=&scope=profile&response_type=code với các thông số như trên, trong đó:
grant_type
: tham số này chỉ định loại cấp quyền (grant type) được sử dụng trong quá trình xác thực OAuth. Trong trường hợp này, "authorization_code" là loại cấp quyền được sử dụng khi người dùng cấp quyền truy cập cho ứng dụng.client_id
: App ID mà bạn vừa tạo ở trên.scope
: Tham số này xác định phạm vi của quyền truy cập mà ứng dụng yêu cầu từ người dùng: OpenID, Profile, Email...response_type
: Tham số này xác định loại phản hồi mà máy chủ OAuth mong đợi từ ứng dụng sau khi người dùng xác thực thành công.
Sau đó người dùng được hỏi liệu họ có sẵn sàng cấp quyền mà ứng dụng của bạn đang yêu cầu hay không. Đây là bước yêu cầu Người sử dụng tự nguyện đồng thuận.
Nếu người dùng chọn Cho phép
, Viblo Accounts sẽ gửi cho ứng dụng bạn vừa đăng ký ở trên một Mã ủy quyền theo "Authorization callback URL".
Nếu người dùng chọn Từ chối
, Viblo Accounts sẽ quay trở lại trang chủ.
Lấy mã truy cập (Get Access Token)
Access Token là một chuỗi ký tự độc lập được sử dụng để xác định danh tính của người dùng, ứng dụng hoặc trang web. Các ứng dụng có thể sử dụng mã token này để thực hiện các lệnh gọi API. Khi một ai đó kết nối đến một ứng dụng thông qua phương thức Sign In của Viblo, ứng dụng đó sẽ nhận được một Access Token để cấp quyền truy cập tạm thời và an toàn đến Viblo Accounts API bằng cách chuyển đổi authorization_code thành access_token từ Viblo Accounts, với các tham số sau:
client_id
: App ID mà bạn vừa tạo ở trên.client_secret
: App secret mà bạn vừa tạo ở trên.code
: Authorization Code vừa nhận được ở bước 2 theo ""Authorization callback URL" app mà bạn vừa đăng ký.grant_type
: authorization_code: tương tự như ở trên.scope
: OpenID, Profile, Email: tương tự như ở trên.
Gửi mã truy cập (Send Access Token)
Sau khi ứng dụng nhận được Mã truy cập ở bước trên, ứng dụng sẽ gửi mã này đến API của Viblo Accounts trong một request HTTP header Authorization.
Kết quả cuối cùng nhận được là thông tin của người dùng.
Kết Luận
Hy vọng bài viết này đã cung cấp cho các bạn những thông tin hữu ích, giúp các bạn hiểu hơn về OAuth - giao thức xác thực và cấp quyền phổ biến trong các ứng dụng web và mobile, cũng như sử dụng nó trong Viblo. Còn rất nhiều điều thú vị trên Viblo mà mình muốn chia sẻ đến mọi người, hẹn mọi người trong các bài viết tiếp theo.
©️ Tác giả: Software Engineer Huy Hoàng