2015-10-02 15 views
6

Từ https://stackoverflow.com/a/7209263/1225328:Làm cách nào để giữ an toàn cho người dùng của tôi khi đăng nhập bằng mã thông báo làm mới?

Ý tưởng về thẻ refresh là nếu một thẻ truy cập được thỏa hiệp, vì nó là ngắn ngủi, những kẻ tấn công có một cửa sổ giới hạn trong đó để lạm dụng nó.

Tôi hiểu, nhưng nếu kẻ tấn công truy cập mã thông báo làm mới, họ sẽ có thể nhận được mã thông báo xác thực mới, tôi có sai không? Điều này dường như chỉ trì hoãn việc tokens tồn tại lâu dài lỗ hổng an ninh ...

Về điểm này, bạn sẽ tìm thấy trong các câu trả lời giống nhau:

Refresh thẻ, nếu bị tổn thương, là vô dụng bởi những kẻ tấn công yêu cầu id ứng dụng và bí mật ngoài mã thông báo làm mới theo thứ tự để nhận mã thông báo truy cập.

Sau đó, sự khác biệt giữa việc sử dụng mã thông báo làm mới và đơn giản là từ chức? Và làm cách nào để bạn lưu trữ id ứng dụng và bí mật nếu bạn không muốn người dùng phải nhập lại chúng một lần nữa?


Như @FStephenQ chỉ ra, một thẻ làm mới có thể được sử dụng một lần duy nhất: một kẻ tấn công sau đó sẽ có thể để nhận mã auth mới, nhưng chỉ một lần, và một thời gian ngắn. Nhưng sau đó, làm cách nào để bạn nhận được mã thông báo làm mới mới khi bạn đã sử dụng mã thông báo làm mới? Nếu bạn nhận được một cái mới khi bạn sử dụng một, một kẻ tấn công sau đó sẽ có thể làm mới thẻ của họ quá ...


Câu hỏi thực tế là: làm thế nào để giữ cho người dùng của tôi đăng nhập? Trên các ứng dụng tôi sử dụng, sau khi đăng nhập, tôi không bao giờ phải đăng nhập lại: chúng hoạt động như thế nào?

Trả lời

4

Chỉ có thể sử dụng mã thông báo làm mới để làm mới một lần và chỉ được gửi tới máy chủ xác thực khi mã thông báo truy cập của ứng dụng khách đã hết hạn. Khi sử dụng mã thông báo làm mới, máy chủ xác thực sẽ trả lại mã thông báo xác thực mới và tùy chọn mã thông báo làm mới mới. Ý tưởng là cho phép sử dụng mã thông báo truy cập trong thời gian ngắn, trong khi cho phép khách hàng hợp lệ xác thực lại mà không buộc người dùng phải đăng nhập lại.

Nếu mã thông báo làm mới bị đánh cắp, nó có thể được sử dụng một lần để nhận mã thông báo truy cập hợp lệ của kẻ tấn công. Khi khách hàng cố gắng làm mới mã thông báo của họ, mã thông báo làm mới của họ sẽ cũ và sẽ bị từ chối. Sau đó, họ sẽ yêu cầu người dùng đăng nhập lại và máy chủ xác thực sẽ cấp cho họ mã thông báo truy cập mới và mã thông báo làm mới và mã thông báo bị đánh cắp sẽ bị vô hiệu.

+1

Cảm ơn bạn đã giải thích những điều này. Nhưng vẫn còn một vấn đề: vì mã thông báo làm mới chỉ có thể được sử dụng một lần, làm thế nào để bạn nhận được mã thông báo làm mới mới sau khi bạn đã sử dụng mã thông báo? Nếu bạn nhận được một cái mới khi bạn sử dụng một, kẻ tấn công sau đó sẽ có thể làm mới mã thông báo của họ quá ... – sp00m

+1

Kẻ tấn công sẽ phải đợi cho đến khi mã thông báo truy cập của họ hết hạn, nếu OAuth được triển khai đúng cách. Và việc xác thực lại người dùng luôn luôn làm lu mờ mã thông báo làm mới; khi người dùng xác thực lại, máy chủ (nên) vô hiệu hóa tất cả mã thông báo truy cập trước đó và mã thông báo làm mới (đối với ứng dụng khách yêu cầu xác thực) và bắt đầu một "chuỗi" mã thông báo mới. Hai thứ này kết hợp có nghĩa là một mã thông báo làm mới bị đánh cắp rất có thể sẽ vô dụng đối với kẻ tấn công, và những kẻ tấn công không thể có chuỗi mã thông báo song song của riêng họ (lâu) mà không có thông tin xác thực người dùng. –

+1

Cảm ơn một lần nữa, tôi nghĩ rằng tôi nhận được nó ngay bây giờ. Nhưng một câu hỏi khác sau đó: nếu người dùng đăng nhập bằng trình duyệt, anh ta sẽ nhận được mã thông báo truy cập và mã thông báo làm mới (# 1).Sau đó, sau đó, người dùng đăng nhập bằng một trình duyệt khác (# 2, ví dụ: tại cơ quan) và làm mới mã thông báo số 2 của anh ấy (vì nó đã hết hạn chẳng hạn). Khi anh ta trở về nhà, anh ta sẽ cần phải xác nhận lại, bởi vì anh ấy đã sử dụng mã thông báo làm mới tại nơi làm việc, điều này đã làm mất hiệu lực tất cả các mã thông báo trước đó. Tôi đã hiểu chính xác chưa? Làm thế nào để tránh hành vi này sau đó? – sp00m

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