Khi tôi đọc câu hỏi của bạn, tôi đã thử mà không thành công khi tìm kiếm trên Internet cách mã thông báo Bearer được mã hóa hoặc ký tên. Tôi đoán mã thông báo mang không được băm (có thể một phần, nhưng không hoàn toàn) bởi vì trong trường hợp đó, sẽ không thể giải mã nó và lấy các thuộc tính của người dùng từ nó.
Nhưng câu hỏi của bạn dường như đang cố gắng tìm câu trả lời về chức năng mã thông báo Bearer:
Giả sử tôi đang triển khai một nhà cung cấp ủy quyền, tôi có thể cung cấp bất kỳ loại chuỗi nào cho mã thông báo không? Nó có thể là một chuỗi ngẫu nhiên? Nó có phải là mã hóa base64 của một số thuộc tính không? Có nên băm?
Vì vậy, tôi sẽ cố gắng giải thích cách hoạt động của mã thông báo Bearer và Làm mới mã thông báo:
Khi người dùng yêu cầu máy chủ gửi mã thông báo gửi mật khẩu và người dùng thông qua SSL, máy chủ sẽ trả về hai thứ: mã thông báo truy cập và mã thông báo làm mới .
Mã thông báo truy cập là mã thông báo Bearer mà bạn sẽ phải thêm vào tất cả các tiêu đề yêu cầu để được xác thực là người dùng cụ thể.
Authorization: Bearer <access_token>
Mã thông báo truy cập là một chuỗi được mã hóa với tất cả các thuộc tính, Khiếu nại và Vai trò người dùng mà bạn muốn. (Bạn có thể kiểm tra kích thước của mã thông báo tăng nếu bạn thêm nhiều vai trò hoặc khiếu nại hơn). Khi Máy chủ tài nguyên nhận được mã thông báo truy cập, nó sẽ có thể giải mã nó và đọc các thuộc tính người dùng này. Bằng cách này, người dùng sẽ được xác nhận và cấp cùng với tất cả các ứng dụng.
Mã thông báo truy cập có thời gian hết hạn ngắn (ví dụ: 30 phút). Nếu mã thông báo truy cập đã hết hạn lâu thì đó sẽ là một vấn đề, vì về mặt lý thuyết không có khả năng thu hồi nó. Vì vậy, hãy tưởng tượng một người dùng có vai trò = "Quản trị viên" thay đổi thành "Người dùng". Nếu người dùng giữ mã thông báo cũ với vai trò = "Quản trị viên", anh ta sẽ có thể truy cập cho đến khi hết hạn mã thông báo với quyền Quản trị viên. Đó là lý do tại sao mã thông báo truy cập hết hạn ngắn.
Nhưng, một vấn đề xuất hiện trong tâm trí. Nếu mã thông báo truy cập hết hạn ngắn, chúng tôi phải gửi cho mỗi người dùng và mật khẩu trong một khoảng thời gian ngắn. Điều này có an toàn không? Không, không phải vậy. Chúng ta nên tránh nó. Đó là khi mã thông báo Làm mới xuất hiện để giải quyết vấn đề này.
Mã thông báo làm mới được lưu trữ trong DB và sẽ hết hạn lâu (ví dụ: 1 tháng).
Người dùng có thể nhận được mã thông báo Access mới (khi hết hạn, cứ sau 30 phút) bằng cách sử dụng mã thông báo làm mới, mà người dùng đã nhận được trong yêu cầu đầu tiên về mã thông báo. Khi mã thông báo truy cập hết hạn, khách hàng phải gửi mã thông báo làm mới. Nếu mã thông báo làm mới này tồn tại trong DB, máy chủ sẽ trả về cho khách hàng mã thông báo truy cập mới và mã thông báo làm mới khác (và sẽ thay thế mã thông báo làm mới cũ bằng mã thông báo mới).
Trong trường hợp mã thông báo truy cập của người dùng đã bị xâm phạm, mã thông báo làm mới của người dùng đó phải bị xóa khỏi DB. Bằng cách này, mã thông báo sẽ chỉ có hiệu lực cho đến khi mã thông báo truy cập hết hạn vì khi tin tặc cố gắng nhận mã thông báo truy cập mới gửi mã thông báo làm mới, hành động này sẽ bị từ chối.