2016-04-07 14 views
5

Làm cách nào để bảo đảm JWT là url kích hoạt trong email?Mã thông báo web JSON (JWT) làm url để kích hoạt email

Ví dụ: Nhấp vào liên kết để kích hoạt tài khoản của bạn http://127.0.0.1:8000/account/activate/eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ0b3B0YWwuY29tIiwiZXhwIjoxNDI2NDIwODAwLCJodHRwOi8vdG9wdGFsLmNvbS9qd3RfY2xhaW1zL2lzX2FkbWluIjp0cnVlLCJjb21wYW55IjoiVG9wdGFsIiwiYXdlc29tZSI6dHJ1ZX0.yRQYnWzskCZUxPwaQupWkiUzKELZ49eM7oWxAQK_ZXw

+0

Mã thông báo này không an toàn, vì bí mật chữ ký của bạn rất dễ đoán. – Thilo

+0

Ngoài ra, cũng không nên là địa chỉ email của một phần của JWT? Hoặc có một số định danh người dùng duy nhất khác không? Có phải là "công ty: Toptal"? – Thilo

+0

ok đó chỉ là một ví dụ mà tôi thậm chí không biết dữ liệu được giải mã. Nếu bí mật chữ ký mạnh thì sao? jwt là một liên kết có an toàn không? Được đề cập ở đây https://github.com/dwyl/learn-json-web-tokens#q-if-i-put-the-jwt-in-the-url-or-header-is-it-secure thực sự đã cho tôi nhầm lẫn. – momokjaaaaa

Trả lời

6

Các FAQ you link to nói:

Sử dụng-trường hợp làm một dấu cho JWT trong một url là: xác minh

Cả hai đều là ứng cử viên tốt cho mã thông báo sử dụng một lần (hết hạn sau khi được nhấp).

Vì vậy, có. Chỉ cần đảm bảo rằng mỗi email chỉ có thể được kích hoạt một lần (và không sử dụng khóa "bí mật" khủng khiếp trong ví dụ của bạn, nếu chữ ký có thể bị giả mạo, khi đó xác minh của bạn có thể bị bỏ qua).

+0

Tôi đã đọc và có câu hỏi . Làm thế nào nó có thể được an toàn? bạn có thể giải thích? và làm cách nào để bạn vô hiệu hóa mã thông báo jwt khi url kích hoạt được nhấp/truy cập? – momokjaaaaa

+0

có an toàn để hiển thị chữ ký trong email không? – momokjaaaaa

+0

vô hiệu hóa mã thông báo: Cơ sở dữ liệu tài khoản của bạn sẽ biết rằng email đã được xác thực. Vì vậy, một mã thông báo không thể được sử dụng hai lần. – Thilo

2

Sử dụng mã thông báo không quốc tịch như JWT là an toàn miễn là bí mật bạn sử dụng để ký mã thông báo và cách bạn xác minh mã đó là an toàn. Nhưng có một số khía cạnh bổ sung mà bạn nên xem xét trước khi sử dụng JWTs làm mã xác thực trong URI đặt lại mật khẩu của bạn ...

Vì bạn không thể làm mất hiệu lực một JWT cụ thể (không giữ trạng thái lại) và hết hạn là không đủ (trong trường hợp cụ thể này), những gì bạn về cơ bản muốn có là JWT của bạn là những gì thường được biết một lần hoặc một lần sử dụng-Token. Lý do là bạn có thể không muốn một liên kết đặt lại mật khẩu duy nhất được sử dụng nhiều hơn một lần để đặt lại mật khẩu vì nó cho phép kẻ tấn công có thể khóa hoàn toàn người dùng (bằng cách thay đổi mật khẩu liên tục).

Tôi đã mô tả cách điều này có thể hoạt động tại đây: Single-Use Tokens w/ JWT - về cơ bản bạn sẽ cần phải chuyển một số trạng thái mà bạn có trên phía máy chủ của mình (trong trường hợp của bạn ví dụ: băm mật khẩu người dùng) thành khóa HMAC và sử dụng để ký mã thông báo dành riêng cho người dùng của bạn. Điều này sẽ dẫn đến việc xác minh mã thông báo không thành công sau khi mật khẩu được thay đổi ...

Các vấn đề liên quan