Cấu hình expiration time cho access token với Spring Authorization Server
Bài viết được sự cho phép của tác giả Nguyễn Hữu Khanh
Một ưu điểm lớn của OAuth2 là có thể cho phép chúng ta giới hạn khoảng thời gian mà một request với access token cụ thể được phép sử dụng resources. Access token sẽ quy định expiration time của nó, cái API resources sẽ dựa vào expiration time này để quyết định có cho phép Client Application tiếp tục truy cập resource hay là không? Sử dụng Spring Authorization Server để implement Authorization Server thì cách cấu hình expiration time cho access token như thế nào? Chúng ta sẽ cùng nhau tìm hiểu trong bài viết này các bạn nhé!
Xem thêm nhiều việc làm Spring lương cao trên TopDev
Điều đầu tiên các bạn cần biết là, chúng ta sẽ sử dụng class TokenSettings của Spring Authorization Server để cấu hình một số thông tin liên quan đến access token. Hiện tại, các bạn có thể cấu hình expiration time, reuse refresh token, refresh token expiration time, ID token signature algorithm.
Để cấu hình expiration time ở mức system level, apply hết cho tất cả các client trong hệ thống, các bạn có thể định nghĩa một bean của TokenSettings như sau:
@Bean public TokenSettings tokenSettings() { // @formatter:off return TokenSettings.builder() .accessTokenTimeToLive(Duration.ofMinutes(30L)) .build(); // @formatter:on }
Sau đó thì trong khai báo của mỗi RegisteredClient, các bạn khai báo thêm thông tin về tokenSettings như sau:
// @formatter:off RegisteredClient registeredClient = RegisteredClient.withId(UUID.randomUUID().toString()) .clientId("huongdanjava1") .clientSecret("{noop}123") .clientAuthenticationMethod(ClientAuthenticationMethod.CLIENT_SECRET_POST) .authorizationGrantType(AuthorizationGrantType.CLIENT_CREDENTIALS) .tokenSettings(tokenSettings()) .build(); // @formatter:on
Này là mình khai báo RegisteredClient với TokenSettings trong một Java class file, nếu các bạn định nghĩa trong 2 class file khác nhau thì có thể sử dụng @Autowired annotation thì inject bean của TokenSettings vào rồi sử dụng nó trong method tokenSettings() của RegisteredClient.
Nếu các bạn muốn specific expiration time cho riêng mỗi RegisteredClient thì hãy khởi tạo mới và sử dụng đối tượng TokenSettings cho đối tượng RegisteredClient đó nhé.
Chạy ví dụ trong bài viết Hiện thực OAuth Authorization Server sử dụng Spring Authorization Server với cấu hình TokenSettings như trên:
sau đó parse nội dung của access token sử dụng https://jwt.io/, các bạn sẽ thấy thời điểm issue access token là:
và thời gian expire là:
Expiration time mặc định của một access token trong Spring Authorization Server là 5 phút các bạn nhé!
Bài viết gốc được đăng tải tại huongdanjava.com
Có thể bạn quan tâm:
- Building Microservices Application – Phần 3: Xác thực API bằng Oauth 2.0
- JSON Web Token là gì?
- Custom authentication filter đăng nhập không cần password trong Spring Security
Xem thêm Việc làm IT hấp dẫn trên TopDev
- i iOS 18 có gì mới? Có nên cập nhật iOS 18 cho iPhone của bạn?
- G Gamma AI là gì? Cách tạo slide chuyên nghiệp chỉ trong vài phút
- P Power BI là gì? Vì sao doanh nghiệp nên sử dụng PBI?
- K KICC HCMC x TOPDEV – Bước đệm nâng tầm sự nghiệp cho nhân tài IT Việt Nam
- T Trello là gì? Cách sử dụng Trello để quản lý công việc
- T TOP 10 SỰ KIỆN CÔNG NGHỆ THƯỜNG NIÊN KHÔNG NÊN BỎ LỠ
- T Tìm hiểu Laptop AI – So sánh Laptop AI với Laptop thường
- M MySQL vs MS SQL Server: Phân biệt hai RDBMS phổ biến nhất
- S SearchGPT là gì? Công cụ tìm kiếm mới có thể đánh bại Google?
- C Cách tích hợp ChatGPT vào Google Search siêu dễ