2014-12-31 28 views
31

Tôi đang tạo ứng dụng dành cho thiết bị di động và đang sử dụng JWT để xác thực.Dòng mã thông báo làm mới JWT

Dường như cách tốt nhất để làm điều này là ghép nối mã thông báo truy cập JWT với mã thông báo làm mới để tôi có thể hết hạn mã thông báo truy cập thường xuyên như tôi muốn.

  1. Mã thông báo làm mới trông như thế nào? Nó là một chuỗi ngẫu nhiên? Chuỗi đó có được mã hóa không? Có một JWT khác không?
  2. Mã thông báo làm mới sẽ được lưu trữ trong cơ sở dữ liệu trên mẫu người dùng để truy cập, đúng không? Có vẻ như nó phải được mã hóa trong trường hợp này
  3. Tôi có gửi lại mã thông báo làm mới sau khi người dùng đăng nhập không và sau đó yêu cầu khách hàng truy cập một tuyến đường riêng để truy xuất mã thông báo truy cập?
+1

Lưu ý, nếu bạn đang sử dụng mã thông báo làm mới, bạn nên cung cấp khả năng người dùng vô hiệu hóa chúng trên giao diện người dùng. Nó cũng được khuyến khích để tự động hết hạn nếu chúng không được sử dụng ví dụ cho một tháng. –

+0

@jtmarmon: làm thế nào để bạn lưu trữ mã thông báo làm mới ở phía máy khách? Tôi có nghĩa là thiết bị Android có an toàn không? – j10

Trả lời

11

Giả sử rằng đây là về OAuth 2.0 vì nó là khoảng JWTs và làm mới thẻ ...:

  1. giống như một thẻ truy cập, về nguyên tắc một thẻ làm mới có thể bất cứ điều gì kể cả tất cả các các tùy chọn bạn mô tả; một JWT có thể được sử dụng khi máy chủ ủy quyền muốn trở thành quốc tịch hoặc muốn thực thi một số ngữ nghĩa "chứng minh sở hữu" cho khách hàng trình bày nó; lưu ý rằng mã thông báo làm mới khác với mã thông báo truy cập ở chỗ nó không được trình bày cho một máy chủ tài nguyên mà chỉ cho máy chủ ủy quyền đã ban hành nó ngay từ đầu, vì vậy việc tối ưu hóa xác thực độc lập cho JWTs-as-access-tokens không giữ cho mã thông báo làm mới

  2. phụ thuộc vào bảo mật/quyền truy cập của cơ sở dữ liệu; nếu cơ sở dữ liệu có thể được truy cập bởi các bên/máy chủ/ứng dụng/người dùng khác, thì có (nhưng số dặm của bạn có thể thay đổi theo vị trí và cách bạn lưu khóa mã hóa ...)

  3. Máy chủ ủy quyền có thể cấp cả mã thông báo truy cập và làm mới mã thông báo cùng một lúc, tùy thuộc vào khoản trợ cấp được khách hàng sử dụng để nhận chúng; spec chứa các chi tiết và các tùy chọn trên mỗi tài trợ chuẩn

+1

2. Bạn nên lưu trữ một mã băm của mã thông báo làm mới trong cơ sở dữ liệu của bạn và sau đó so sánh băm của mã thông báo làm mới của người dùng với băm được lưu trữ của bạn. Quy tắc "không lưu trữ mật khẩu văn bản thuần túy trong cơ sở dữ liệu của bạn" ở đây. Xem xét mã thông báo như mật khẩu ngẫu nhiên mà bạn đã thực hiện cho người dùng. – Rohmer

10

Có trụ sở tại implementation with Node.js of JWT with refresh token này:

1) Trong trường hợp này, họ sử dụng một uid và nó không phải là một JWT. Khi họ làm mới mã thông báo, họ sẽ gửi mã thông báo làm mới và người dùng. Nếu bạn thực hiện nó như một JWT, bạn không cần gửi người dùng, bởi vì nó sẽ nằm trong JWT.

2) Chúng thực hiện điều này trong tài liệu được phân tách (bảng). Nó có ý nghĩa với tôi bởi vì một người dùng có thể được đăng nhập trong các ứng dụng khách khác nhau và nó có thể có một mã thông báo làm mới bằng ứng dụng. Nếu người dùng mất thiết bị đã cài đặt một ứng dụng, mã thông báo làm mới của thiết bị đó có thể bị vô hiệu mà không ảnh hưởng đến các thiết bị đã đăng nhập khác.

3) Trong triển khai này, nó phản hồi phương thức đăng nhập bằng cả mã thông báo truy cập và mã thông báo làm mới. Nó seams chính xác với tôi.

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