Offline token với Keycloak

Offline access là một tính năng của OpenID Connect được định nghĩa tại https://openid.net/specs/openid-connect-core-1_0.html#OfflineAccess. Nó giúp cho application với offline token (một loại của refresh token) có thể lấy access token và sử dụng resource mà không cần user phải đăng nhập trong thời gian dài hoặc mãi mãi. Keycloak hỗ trợ chúng ta làm việc với offline access bằng cách sử dụng offline token. Cụ thể như thế nào? Chúng ta hãy cùng nhau tìm hiểu trong bài viết này các bạn nhé!

Để làm ví dụ, mình sẽ tạo mới một client với grant type Authorization Code trong Keycloak như sau:

Điều đầu tiên các bạn cần phải biết là làm thế nào chúng ta lấy được offline token.

Rất đơn giản, trong request lấy authorization code cho client, chúng ta cần truyền thêm scope là offline_access là được:

Keycloak sẽ hỏi chúng ta có cho phép Client Application Offline Access hay không?

Nếu các bạn đồng ý thì sau khi có authorization code, request lấy access token cho client này:

parse nội dung của refresh token, các bạn sẽ thấy nội dung payload như sau:

Type của token này là Offline thay vì Refresh và các bạn có thể thấy, không có claim “exp” với expiration time như khi chúng ta parse access token:

Chúng ta có thể sử dụng offline token này để lấy access token mới tương tự như refresh token.

Ví dụ như sau:

Điểm khác biệt giữa offline token và refresh token là không có expiration time cho offline token.

Mặc định thì offline token là nó sẽ luôn valid dù user không đăng nhập hoặc server bị restart, chỉ trừ khi nó bị revoke. Tuy nhiên, các bạn cần sử dụng offline token này ít nhất là một lần trong khoảng thời gian mặc định là 30 ngày, kể từ lần sử dụng gần nhất. Đó là bởi vì, một offline token sẽ associate với một offline session. Và offline session này chỉ có thời gian chờ (idle time) mặc định là 30 ngày như mình nói ở trên. Ở Realm level thì giá trị 30 ngày này được cấu hình trong tab Sessions của Realm settings, phần Offline session settings, field Offline Session Idle:

Ở phần Offline session settings này, như các bạn thấy, chúng ta còn có 1 field khác liên quan đến offline session nữa, tên là Offline Session Max Limited. Ý nghĩa của field này là nếu các bạn enable, offline token sẽ bị expired trong thời gian mặc định là 60 ngày, dù chúng ta có sử dụng offline token này bao nhiêu lần đi chẳng nữa:

Ở các phiên bản cũ, Keycloak cho phép chúng ta override các cấu hình liên quan đến offline session ở Client level và cho phép chúng ta xem hết tất cả các Offline token đã được issue cho client. Nhưng với phiên bản mà mình đang sử dụng v19.x, có vẻ Keycloak đã remove các tính năng này. Nếu các bạn biết các cấu hình này nằm ở đâu thì hãy comment cho mình nhé!

5/5 - (1 bình chọn)

One thought on “Offline token với Keycloak

Add Comment