Grant type là cách mà Authorization Server của OAuth 2.0 có thể process và xác nhận rằng Client Application đủ điều kiện để có thể access tới Resource Server. Có tất cả 5 loại grant type mà OAuth 2.0 định nghĩa trong spec của mình, đó là:
- Authorization Code
- Implicit
- Resource Owner Password Credentials
- Client Credentials
- Refresh Token
Trong bài viết này, chúng ta sẽ tìm hiểu chi tiết cho mỗi loại grant type các bạn nhé!
Authorization Code
Với grant type này, đầu tiên, Client Application sẽ request authorization code từ Authorization Server, sau đó thì sử dụng authorization code này cùng với client secret để lấy access token. Sau khi đã có access token rồi thì Client Application có thể sử dụng access token này để xác nhận với Resource Server về resource mà nó muốn sử dụng. Cụ thể quá trình grant type của Authorization Code sẽ diễn ra như sau:
OAuth 2.0 Security Best Current Practice khuyên chúng ta nên sử dụng grant type này với PKCE https://datatracker.ietf.org/doc/html/draft-ietf-oauth-security-topics#section-2.1.1. Các bạn có thể xem thêm về grant type Authorization Code với PKCE tại đây nhé.
Implicit
Grant type này giống với grant type Authorization Code phần lớn, ngoại trừ một điểm là Authorization Server sẽ không trả về authorization code cho Client Application mà sẽ trả về access token luôn ngay khi chúng ta đăng nhập vào Authorization Server.
Điều này có nghĩa access token không được lưu trữ bảo mật trên Client Application mà bây giờ, chúng ta có thể thấy được access token luôn.
Cụ thể, quá trình grant type sử dụng Implicit sẽ diễn ra như sau:
OAuth 2.0 Security Best Current Practice khuyên chúng ta không nên sử dụng grant type này https://datatracker.ietf.org/doc/html/draft-ietf-oauth-security-topics#section-2.1.2, hãy sử dụng grant type Authorization Code với PKCE thay thế các bạn nhé!
Resource Owner Password Credentials
Với grant type này thì chúng ta phải tin tưởng Client Application hoàn toàn, vì chúng ta sẽ phải đăng nhập vào Client Application sử dụng thông tin đăng nhập vào Authorization Server. Client Application khi đó sẽ nắm được thông tin đăng nhập của chúng ta.
Chỉ sử dụng grant type này nếu thật sự cần thiết thôi các bạn nhé!
OAuth 2.0 Security Best Current Practice khuyên chúng ta không nên sử dụng grant type này https://datatracker.ietf.org/doc/html/draft-ietf-oauth-security-topics-13#section-3.4
Client Credentials
Grant type này được sử dụng cho các Client Application có thể lấy access token mà không cần phải thông qua user. Chúng ta sẽ sử dụng một cặp client ID và client secret để làm điều này.
Refresh Token
Trong OAuth 2.0, chúng ta sử dụng access token để verify request từ Client Application để quyết định xem Client Application này có được phép truy cập resource hay không? Access token có thời hạn để sử dụng trước khi nó bị expired và khi nó expired Client Application phải lấy lại access token thì mới có thể tiếp tục request tới resources được.
Một vấn đề xảy ra đối với Authorization Code grant type là mỗi khi chúng ta muốn lấy access token mới, chúng ta cần user phải đăng nhập. OAuth 2.0 giới thiệu một khái niệm là refresh token, giúp cho chúng ta không cần phải có user đăng nhập thì mới lấy được access token. Mỗi khi Authorization Server issue một access token cho Authorization Code grant type, nó sẽ bao gồm cả refresh token. Các bạn chỉ cần sử dụng refresh token này cùng với client ID và client secret thì có thể lấy access token mới mà không cần phải làm theo các bước cần phải làm của Authorization Code grant type bao gồm việc bắt buộc phải có user đăng nhập.
dao
Thanks admin