Mã thông báo làm mới phục vụ ít nhất hai mục đích. Đầu tiên, mã thông báo làm mới là một loại 'bằng chứng' cho thấy Ứng dụng khách OAuth2 đã nhận được quyền từ người dùng để truy cập vào dữ liệu của họ và do đó, có thể yêu cầu lại mã thông báo truy cập mới mà không yêu cầu người dùng thực hiện toàn bộ quy trình OAuth2. Và thứ hai, nó giúp tăng toàn bộ quy trình bảo mật khi so sánh với mã thông báo truy cập tồn tại lâu dài. Tôi sẽ đề cập chi tiết hơn về cả hai điểm này.
Làm mới mã thông báo như một phương tiện để không làm phiền người dùng
Hãy nói về mục đích đầu tiên với một ví dụ. Giả sử bạn, một Người dùng, đang sử dụng ứng dụng web Máy khách của bên thứ ba muốn tương tác với dữ liệu tài khoản YouTube của bạn. Sau khi cấp quyền cho ứng dụng Khách sử dụng dữ liệu YouTube của mình, bạn có muốn ứng dụng Khách nhắc lại quyền của bạn khôngkhi mã thông báo YouTube của nó hết hạn? Điều gì sẽ xảy ra nếu thời gian hết hạn mã thông báo YouTube là rất thấp, chẳng hạn như 5 phút. Sẽ hơi khó chịu khi ứng dụng Khách hàng nhắc bạn cho phép ít nhất 5 phút một lần! Giải pháp mà OAuth2 đề xuất cho 'vấn đề' này là làm mới mã thông báo. Bằng cách sử dụng mã thông báo làm mới, mã thông báo truy cập có thể tồn tại trong thời gian ngắn (điều này mong muốn trong trường hợp mã thông báo truy cập bị rò rỉ hoặc bị đánh cắp bằng cách nào đó) và mã làm mới có thể vẫn tồn tại lâu (er), cho phép Khách hàng có được quyền truy cập mới mã thông báo khi hết hạn mà không yêu cầu sự cho phép của người dùng (một lần nữa).
Nhưng tại sao lại là một mã thông báo làm mới? Nếu vấn đề là không gây lỗi cho Người dùng với các yêu cầu cấp quyền, thì tại sao Khách hàng không thể chỉ nói "Này, Máy chủ cấp quyền, tôi muốn một mã thông báo truy cập khác. Bây giờ!"? Hoặc, "Này Máy chủ Ủy quyền, đây là mã thông báo đã hết hạn của tôi, hãy cho tôi một mã mới!". Vâng, mã thông báo làm mới đóng vai trò như một loại "bằng chứng" rằng Khách hàng tại một thời điểm ban đầu nào đó đã được Người dùng cấp quyền truy cập. "Bằng chứng" này ở dạng mã thông báo làm mới được ký điện tử bởi Máy chủ ủy quyền. Bằng cách Khách hàng xuất trình mã thông báo làm mới, Máy chủ Ủy quyền có thể xác minh rằng Khách hàng đã nhận được quyền từ Người dùng, tại một thời điểm nào đó trong quá khứ và Khách hàng không phải nhắc lại Người dùng.
Làm mới mã thông báo như một phương tiện để tăng cường bảo mật
Tuy nhiên, điều này đặt ra câu hỏi, "Chà, điều gì sẽ xảy ra nếu mã thông báo làm mới bị rò rỉ hoặc bị đánh cắp hoặc đơn giản là do một ứng dụng Client độc hại giữ lại mà không loại bỏ nó theo yêu cầu của người dùng? Kẻ tấn công không thể tiếp tục sử dụng mã làm mới để đạt được mã truy cập hợp lệ vô thời hạn (hoặc cho đến khi nó hết hạn)? Câu hỏi này dẫn đến thảo luận về mục đích thứ hai mà tôi đã đề cập, làm mới mã thông báo góp phần tạo ra một quy trình an toàn hơn.
Vấn đề nảy sinh với mã thông báo truy cập là sau khi được mua, chúng chỉ được trình bày với Máy chủ tài nguyên (YouTube chẳng hạn). Vì vậy, nếu mã thông báo truy cập bị đánh cắp hoặc bị xâm phạm, làm thế nào để bạn nói với Máy chủ tài nguyên không tin tưởng mã thông báo đó? Chà, bạn không thể thực sự. Cách duy nhất để làm điều đó là thay đổi khóa ký riêng tư trên Máy chủ ủy quyền (khóa đã ký mã thông báo ngay từ đầu). Tôi nghĩ rằng điều này là không thuận tiện để thực hiện và trong một số trường hợp (như Auth0), không được hỗ trợ.
Mặt khác, mã thông báo làm mới cần được xuất trình cho Máy chủ cấp quyền thường xuyên và vì vậy nếu một mã bị xâm phạm, thì việc thu hồi hoặc từ chối toàn bộ mã thông báo làm mới là điều nhỏ nhặt và không phải thay đổi bất kỳ khóa ký nào.