Công cụ dành cho nhà phát triển · Bộ giải mã JWT
JWT exp, iat và nbf: NumericDate là giây, không phải mili giây
· Cách thức hoạt động
jwt dấu thời gian gỡ lỗi
JavaScript cung cấp cho bạn mili giây và JWT muốn giây, do đó dấu thời gian bị sai theo hệ số một nghìn. Bài đăng này giải thích NumericDate và cách đọc xác nhận quyền sở hữu ba lần một cách chính xác.
Mã thông báo không bao giờ hết hạn hoặc hết hạn trước khi chúng đến - hai triệu chứng của lỗi đơn vị
Một ngàn sai lầm sẽ tạo ra những triệu chứng kịch tính. Việc cung cấp JavaScript mili giây trong đó nhà sản xuất mã thông báo mong đợi giây kỷ nguyên có thể đẩy thời hạn sử dụng ra xa hàng nghìn năm. Việc chia lại giá trị giây có thể đặt nó gần 1970, làm cho mã thông báo mới phát hành có vẻ như đã hết hạn trước yêu cầu hợp pháp đầu tiên của nó.
Bộ giải mã giúp hiển thị tỷ lệ bằng cách hiển thị xác nhận bằng số bên cạnh số đọc ISO. Màn hình đó chỉ mang tính chất chẩn đoán. Kẻ tấn công có thể ghi bất kỳ số `exp`, `iat` hoặc `nbf` nào vào tải trọng không dấu hoặc giả mạo, do đó, thời gian đồng hồ được chuyển đổi chỉ có thẩm quyền sau khi xác thực chính sách và chữ ký ở nơi khác.
NumericDate trong RFC 7519 — giây kể từ kỷ nguyên Unix, dưới dạng số JSON, được phép phân số nhưng hiếm khi được sử dụng
JWT xác nhận quyền sở hữu thời gian sử dụng biểu diễn NumericDate: một số JSON đếm số giây từ kỷ nguyên Unix. Số phân số có thể biểu thị vị trí thứ hai vì việc triển khai sẽ nhân giá trị với 1,000 trước khi tạo Ngày. Nó không làm tròn số hữu hạn hợp lệ thành số nguyên trước tiên.
ToolAcre công nhận `exp`, `nbf`, `iat`, `auth_time` và `updated_at` là các trường có hình thời gian để hiển thị. Chỉ có ba phần đầu tiên nằm trong số các mô tả xác nhận quyền sở hữu đã đăng ký của nó. Các kết quả Ngày không phải là số, vô hạn hoặc không hợp lệ bị bỏ qua thay vì được hiển thị dưới dạng thời gian có ý nghĩa, ngăn không cho một chuỗi như “sớm” giả dạng dấu thời gian.
Date.now() là mili giây — thói quen JavaScript tạo ra thời gian hết hạn trong tương lai xa
`Date.now()` trả về mili giây, trong khi giá trị NumericDate được biểu thị bằng giây. Do đó, nhà sản xuất lấy yêu cầu từ đồng hồ trình duyệt cần chuyển đổi tỷ lệ rõ ràng, thường chia cho 1,000 trước khi áp dụng chính sách làm tròn của riêng mình. Đường dẫn đọc ToolAcre thực hiện phép nhân nghịch đảo chỉ để hiển thị.
Giữ việc chuyển đổi đơn vị hiển thị trong phần đánh giá mã. Giá trị mười ba chữ số trong `exp` là một dấu hiệu cảnh báo hữu ích nhưng việc đếm chữ số không phải là xác minh và không thể thay thế hợp đồng của nhà sản xuất. Bộ giải mã sẽ cố gắng hiển thị bất kỳ xác nhận quyền sở hữu số hữu hạn nào mà JavaScript Ngày có thể đại diện; nó không âm thầm diễn giải lại mili giây thành giây.
exp, nbf và iat - hết hạn, không có trước và được phát hành vào lúc, cũng như cách người xác minh áp dụng từng cái
`exp` đặt tên cho thời điểm mà sau đó người xác minh sẽ không còn chấp nhận mã thông báo theo chính sách của mình nữa. `nbf` đặt tên cho một ranh giới mà trước đó ranh giới đó không được chấp nhận. `iat` ghi lại thời gian phát hành. ToolAcre gắn nhãn những ý nghĩa này và chỉ so sánh `exp` và `nbf` với đồng hồ tham chiếu được cung cấp.
Trạng thái được trả về là `expired` khi thời hạn được giải mã sớm hơn hiện tại, `future` khi không-trước nằm muộn hơn hiện tại và `past` đối với các xác nhận thời gian được hiển thị khác. Các nhãn này là những quan sát về số học tải trọng. Chúng không phải là một quyết định xác thực và không đánh giá nhà phát hành, đối tượng, khóa hoặc chữ ký.
Sự khác biệt về đồng hồ và độ trễ thuộc về người xác minh; bộ giải mã này không xác định
Đề cương hỏi độ lệch đồng hồ bao nhiêu là hợp lý, nhưng cả cấu hình và cách triển khai bộ giải mã JWT đều không xác định độ trễ. Con số đó thuộc về trình xác minh và các yêu cầu triển khai của nó. Việc phát minh ra một mặc định ở đây sẽ biến một bài viết kiểm tra thành chính sách bảo mật không có giấy tờ, vì vậy phần này cố tình không cung cấp chính sách nào.
Nếu một dịch vụ từ chối mã thông báo gần ranh giới, hãy so sánh đồng hồ dịch vụ, đồng hồ của nhà phát hành và chính sách xác minh được định cấu hình bằng nhật ký đáng tin cậy. ToolAcre giải quyết các khiếu nại đối với Ngày hiện tại của trình duyệt mà không có khoảng thời gian chấp nhận. Do đó, kết quả của nó có thể khác với một máy chủ cố tình áp dụng sự chậm trễ, ngay cả khi cả hai đều phân tích cùng một số.
Ví dụ đã hoạt động - chuyển đổi giá trị exp mẫu thành thời gian mà con người có thể đọc được và kiểm tra nó với iat
Giả sử tải trọng tổng hợp chứa `iat: 1717243200` và `exp: 1717246800`. Nhân với 1,000 sẽ có ISO tức thời `2024-06-01T12:00:00.000Z` và `2024-06-01T13:00:00.000Z`. Trừ đi các giá trị giây thô sẽ mang lại khoảng thời gian một giờ mà không trộn mili giây của trình duyệt vào phép tính.
Số học đó mô tả tải trọng nói gì. Nó không cho thấy rằng nhà phát hành đã chọn những giá trị đó hoặc một giờ phù hợp cho bất kỳ ứng dụng nào. ToolAcre in đẹp các số, tạo UTC hàng và có thể coi thời hạn hết hạn là cũ so với ngày hôm nay; người xác minh phải xác thực độc lập và thực thi các quy tắc chấp nhận của riêng mình.
Điều này không bao gồm điều gì — liệu một máy chủ cụ thể có chấp nhận mã thông báo hay không, điều này phụ thuộc vào đồng hồ và thời gian chờ của nó; bộ giải mã hiển thị các giá trị chứ không phải kết quả
Bộ giải mã không thể dự đoán liệu một máy chủ cụ thể có chấp nhận mã thông báo hay không. Máy chủ có thể sử dụng đồng hồ khác, dung sai được định cấu hình, lược đồ xác nhận quyền sở hữu chặt chẽ hơn hoặc kiểm tra đối tượng và nhà phát hành bổ sung. Chỉ riêng lỗi chữ ký có thể từ chối mã thông báo có Số Ngày được hiển thị trông hoàn toàn bình thường.
Ngược lại, thời hạn sử dụng trong tương lai không làm cho mã thông báo chưa được xác minh trở nên hợp lệ. Hãy coi bảng thời gian như một cách để phát hiện các lỗi đơn vị có thể xảy ra và thu thập bằng chứng để gỡ lỗi. Phán quyết thực tế nằm trong nhật ký máy chủ hoặc kiểm tra xác minh có kiểm soát với khóa và chính sách dự kiến, không bao giờ nằm trong bảng giải mã.
Bài học rút ra: đọc các xác nhận quyền sở hữu, thực hiện phép tính số học — bộ giải mã ToolAcre JWT hiển thị exp, iat và nbf để bạn có thể tự kiểm tra các đơn vị
Đọc các xác nhận quyền sở hữu và thực hiện số học tỷ lệ một cách có chủ ý: Số giây NumericDate chỉ trở thành JavaScript mili giây ở ranh giới Ngày. ToolAcre làm cho phép nhân đó rõ ràng trong nguồn và hiển thị giá trị ISO kết quả, đồng thời bỏ qua các loại thời gian không đúng định dạng thay vì đoán tác giả dự định.
Giữ sự phân biệt bảo mật rõ ràng như nhau. Việc hiển thị `exp` không phải là thực thi hết hạn, `nbf` hiển thị không phải là kiểm soát tiếp nhận và `iat` không phải là bằng chứng cấp phát. Sau khi kiểm tra mã thông báo dùng một lần, hãy sử dụng trình xác minh đáng tin cậy để xác thực mã thông báo đó và áp dụng chính sách yêu cầu và đồng hồ thực của dịch vụ.