JWT Authorization: Controlling Access to Resources with JSON Web Tokens
JSON Web Tokens (JWT) không chỉ hữu ích cho việc xác thực mà nó còn cung cấp khả năng authorization. Trong bài viết này, chúng ta sẽ khám phá cách sử dụng JWT để cấp quyền truy cập vào các tài nguyên hoặc chức năng cụ thể trong một ứng dụng web.
The Basics of JWT Authorization
Trong ủy quyền (authorization) JWT, máy chủ có thể cấp quyền truy cập vào các tài nguyên hoặc chức năng cụ thể dựa trên nội dung của JWT. JWT có thể bao gồm các yêu cầu xác định những gì người dùng được phép truy cập và máy chủ có thể sử dụng các yêu cầu này để xác định có cấp quyền truy cập hay không.
Ví dụ: hãy xem xét một ứng dụng web cho phép người dùng quản lý hồ sơ của họ và đăng bài viết. Máy chủ có thể đưa ra JWT bao gồm các yêu cầu như user_id
, can_edit_profile
và can_post_article
. Khi người dùng đưa ra yêu cầu chỉnh sửa hồ sơ của họ, máy chủ có thể xác minh JWT và kiểm tra xem yêu cầu can_edit_profile
có đúng không. Nếu đúng, máy chủ sẽ cấp quyền truy cập vào chức năng chỉnh sửa hồ sơ. Nếu không, máy chủ sẽ trả về lỗi.
Using Scopes for JWT Authorization
Một cách phổ biến để triển khai ủy quyền JWT là sử dụng scopes
. Scopes về cơ bản là các quyền xác định những gì người dùng được phép truy cập. Mỗi scope được xác định bởi một URI duy nhất và có thể được đưa vào JWT dưới dạng claims.
Ví dụ: hãy xem xét một ứng dụng web cho phép người dùng truy cập nhiều loại tài nguyên, bao gồm hồ sơ, bài viết và nhận xét của họ. Máy chủ có thể xác định các phạm vi như hồ sơ
, bài viết
và bình luận
. Khi người dùng đăng nhập, máy chủ có thể phát hành JWT bao gồm các phạm vi phù hợp dựa trên vai trò và quyền của người dùng đó.
{
"iss": "https://example.com",
"sub": "1234567890",
"exp": 1516239022,
"iat": 1516235418,
"scopes": [
"profile",
"articles"
]
}
Khi người dùng đưa ra yêu cầu truy cập tài nguyên, máy chủ có thể xác minh JWT và kiểm tra xem scopes
được yêu cầu có được đưa vào yêu cầu hay không. Nếu có, máy chủ sẽ cấp quyền truy cập. Nếu không, máy chủ sẽ trả về lỗi.
Using Custom Claims for JWT Authorization
Một cách khác để triển khai ủy quyền JWT là sử dụng các yêu cầu tùy chỉnh. Xác nhận quyền sở hữu tùy chỉnh là các xác nhận quyền sở hữu không phải là một phần của đặc tả JWT tiêu chuẩn, nhưng được xác định bởi ứng dụng.
Ví dụ: hãy xem xét một ứng dụng web cho phép người dùng truy cập các phần khác nhau của ứng dụng dựa trên vai trò của họ (ví dụ: quản trị viên, người dùng, khách). Máy chủ có thể đưa ra JWT bao gồm yêu cầu tùy chỉnh được gọi là role
. Khi người dùng đưa ra yêu cầu, máy chủ có thể xác minh JWT và kiểm tra xem yêu cầu role
có được đặt thành giá trị phù hợp hay không.
{
"iss": "https://example.com",
"sub": "1234567890",
"exp": 1516239022,
"iat": 1516235418,
"role": "admin"
}
Nếu vai trò của người dùng không được phép truy cập tài nguyên được yêu cầu, thì máy chủ có thể trả về lỗi
Conclusion
Ủy quyền JWT là một cách mạnh mẽ để kiểm soát quyền truy cập vào tài nguyên trong ứng dụng web. Bằng cách bao gồm các yêu cầu xác định những gì người dùng được phép truy cập, bạn có thể tạo một hệ thống ủy quyền linh hoạt và chi tiết, dễ triển khai và bảo trì. Cho dù bạn sử dụng phạm vi, yêu cầu tùy chỉnh hay kết hợp cả hai, ủy quyền JWT có thể giúp bạn tạo ứng dụng web an toàn và có thể mở rộng đáp ứng nhu cầu của người dùng.
All rights reserved