Xác thực dựa trên mã thông báo là gì?


515

Tôi muốn hiểu xác thực dựa trên mã thông báo nghĩa là gì. Tôi đã tìm kiếm trên mạng nhưng không thể tìm thấy bất cứ điều gì dễ hiểu.


17
Tôi đã đọc rất nhiều mô tả, nhưng tất cả chúng dường như nhẹ trên các chi tiết cụ thể. Bài viết này cuối cùng đã giúp tôi: scotch.io/tutorials/the-anatomy-of-a-json-web-token
Chris Conover

Câu trả lời:


543

Tôi nghĩ rằng nó được giải thích tốt ở đây - chỉ trích dẫn những câu chính của bài viết dài:

Khái niệm chung đằng sau một hệ thống xác thực dựa trên mã thông báo là đơn giản. Cho phép người dùng nhập tên người dùng và mật khẩu của họ để có được mã thông báo cho phép họ tìm nạp một tài nguyên cụ thể - mà không cần sử dụng tên người dùng và mật khẩu của họ. Khi mã thông báo của họ đã được lấy, người dùng có thể cung cấp mã thông báo - cung cấp quyền truy cập vào một tài nguyên cụ thể trong một khoảng thời gian - đến trang web từ xa.

Nói cách khác: thêm một cấp xác nhận để xác thực - thay vì phải xác thực bằng tên người dùng và mật khẩu cho mỗi tài nguyên được bảo vệ, người dùng xác thực theo cách đó một lần (trong một phiên có thời lượng giới hạn), nhận được mã thông báo giới hạn thời gian và sử dụng mã thông báo đó để xác thực thêm trong phiên.

Ưu điểm là rất nhiều - ví dụ: người dùng có thể chuyển mã thông báo, khi họ đã nhận được nó, cho một số hệ thống tự động khác mà họ sẵn sàng tin tưởng trong một thời gian giới hạn và một bộ tài nguyên hạn chế, nhưng sẽ không sẵn sàng tin tưởng với tên người dùng và mật khẩu của họ (nghĩa là với mọi tài nguyên họ được phép truy cập, mãi mãi hoặc ít nhất là cho đến khi họ thay đổi mật khẩu).

Nếu mọi thứ vẫn chưa rõ ràng, vui lòng chỉnh sửa câu hỏi của bạn để làm rõ CÁI GÌ không rõ ràng 100% với bạn và tôi chắc chắn chúng tôi có thể giúp bạn thêm.


6
Tôi có đúng không khi nghĩ rằng trong một ứng dụng web, một (hoặc nhiều) cookie từ trang web từ xa thực hiện chức năng của mã thông báo?
AJP

29
Vì các mã thông báo được lưu trữ dưới dạng cookie, có cách nào để ngăn chặn một người ăn cắp cookie / mã thông báo đó và tự sử dụng nó, lừa máy chủ nghĩ rằng họ là người dùng được ủy quyền không? Rõ ràng là họ chỉ có thể sử dụng nó trong x lượng thời gian, nhưng trong khoảng thời gian đó họ có thể gây ra tất cả những thiệt hại họ cần.
BenM

40
Điều này khác với SessionAuthentication như thế nào, nơi người dùng có thể có được session_id bằng cách nhập tên người dùng và mật khẩu của mình, sau đó sử dụng session_id này trong yêu cầu tiếp theo?
Saurabh Verma

4
nếu mã thông báo hết hạn, người dùng có phải đăng nhập lại để nhận mã thông báo mới không?
Anthony đến

12
@SaurabhVerma khác với phiên vì bạn không phải lưu trữ thông tin trong cookie. Điều đó thật tuyệt vời cho các thiết bị di động, một số trong đó có những hạn chế đối với việc sử dụng cookie.
Kebman

182

Từ Auth0.com

Xác thực dựa trên mã thông báo, dựa trên mã thông báo đã ký được gửi đến máy chủ theo từng yêu cầu.

Những lợi ích của việc sử dụng một cách tiếp cận dựa trên mã thông báo là gì?

  • Tên miền chéo / CORS: cookie + CORS không chơi tốt trên các miền khác nhau. Cách tiếp cận dựa trên mã thông báo cho phép bạn thực hiện các cuộc gọi AJAX đến bất kỳ máy chủ nào, trên bất kỳ miền nào vì bạn sử dụng tiêu đề HTTP để truyền thông tin người dùng.

  • Không trạng thái (còn gọi là khả năng mở rộng phía máy chủ): không cần phải lưu trữ phiên, mã thông báo là một thực thể độc lập truyền tải tất cả thông tin người dùng. Phần còn lại của tiểu bang sống trong cookie hoặc lưu trữ cục bộ ở phía khách hàng.

  • CDN: bạn có thể phục vụ tất cả các tài sản của ứng dụng của mình từ CDN (ví dụ: javascript, HTML, hình ảnh, v.v.) và phía máy chủ của bạn chỉ là API.

  • Decoupling: bạn không bị ràng buộc với bất kỳ sơ đồ xác thực cụ thể nào. Mã thông báo có thể được tạo ở bất cứ đâu, do đó API của bạn có thể được gọi từ bất kỳ đâu với một cách xác thực các cuộc gọi đó.

  • Sẵn sàng cho thiết bị di động: khi bạn bắt đầu làm việc trên nền tảng gốc (iOS, Android, Windows 8, v.v.), cookie không lý tưởng khi sử dụng phương pháp tiếp cận dựa trên mã thông báo đơn giản hóa điều này rất nhiều.

  • CSRF: vì bạn không dựa vào cookie, bạn không cần phải bảo vệ khỏi các yêu cầu trang web chéo (ví dụ: không thể sib trang web của bạn, tạo yêu cầu POST và sử dụng lại cookie xác thực hiện tại vì sẽ không có ).

  • Hiệu suất: chúng tôi không trình bày bất kỳ điểm chuẩn hoàn hảo khó khăn nào ở đây, nhưng một vòng tròn mạng (ví dụ: tìm phiên trên cơ sở dữ liệu) có thể mất nhiều thời gian hơn so với việc tính toán một HMACSHA256 để xác thực mã thông báo và phân tích nội dung của nó.


6
@Asik Tất cả các điểm ở đây đều hợp lệ ngoại trừ "Không quốc tịch" khi bạn bắt đầu xử lý việc thu hồi mã thông báo, danh sách đen, trả lời phòng chống tấn công, v.v.
svlada 16/8/2016

Trang web được trích dẫn đề xuất một bài viết mới hơn về cùng một chủ đề: auth0.com/blog/cookies-vs-tokens-definitive-guide
ASalazar

2
Bạn có thể muốn đọc "Ngừng sử dụng JWT cho các phiên": cryto.net/~joepie91/blog/2016/06/13/stop-USE-jwt-for-simes
Juraj Martinka

1
Asik, làm thế nào về tính hợp lệ của mã thông báo và khi nào nó sẽ hết hạn? Nếu bạn thêm những thông tin đó sẽ tốt.
Arun Prakash

2
Liên kết bây giờ bị hỏng.
Hình elip

95

A tokenlà một phần dữ liệu chỉ Server Xcó thể có thể được tạo và chứa đủ dữ liệu để xác định một người dùng cụ thể.

Bạn có thể trình bày thông tin đăng nhập của bạn và yêu cầu Server Xmột token; và sau đó bạn có thể trình bày tokenvà yêu cầu Server Xthực hiện một số hành động cụ thể của người dùng.

Tokens được tạo bằng cách sử dụng các kết hợp khác nhau của các kỹ thuật khác nhau từ lĩnh vực mật mã cũng như với đầu vào từ lĩnh vực nghiên cứu bảo mật rộng hơn. Nếu bạn quyết định đi và tạo ra tokenhệ thống của riêng bạn, tốt nhất bạn nên thực sự thông minh.


4
Nói chung, nếu bạn muốn xác thực dựa trên mã thông báo, bạn nên bắt đầu với OAuth.
Bob Aman

6
OAuth chắc chắn khả thi trong một ứng dụng dựa trên Web. Nhưng, ví dụ, các phiên đăng nhập hệ điều hành cũng sử dụng các hệ thống mã thông báo, cũng như nhiều loại chương trình phần mềm khác, vì vậy ý ​​tưởng này không giới hạn trong Web.
yfeldblum

1
Một mã thông báo có lẽ cũng thích hợp hơn cho một hệ thống hỗ trợ khách hàng ngoài công cộng. Công ty kiểm soát tên người dùng / mật khẩu và các vấn đề & kiểm soát mã thông báo.
KevinManx

chrs - nhưng hệ thống này khác với hệ thống dựa trên phiên như thế nào?
BKSpurgeon

@BKSpurgeon - Mã thông báo là một cách phổ biến để triển khai các phiên xác thực.
yfeldblum

40

Mã thông báo là một phần dữ liệu được tạo bởi máy chủ và chứa thông tin để xác định tính hợp lệ của người dùng và mã thông báo cụ thể. Mã thông báo sẽ chứa thông tin của người dùng, cũng như mã mã thông báo đặc biệt mà người dùng có thể chuyển đến máy chủ bằng mọi phương thức hỗ trợ xác thực, thay vì gửi trực tiếp tên người dùng và mật khẩu.

Xác thực dựa trên mã thông báo là một kỹ thuật bảo mật xác thực người dùng cố gắng đăng nhập vào máy chủ, mạng hoặc một số hệ thống bảo mật khác bằng mã thông báo bảo mật do máy chủ cung cấp.

Xác thực thành công nếu người dùng có thể chứng minh với máy chủ rằng họ là người dùng hợp lệ bằng cách chuyển mã thông báo bảo mật. Dịch vụ xác thực mã thông báo bảo mật và xử lý yêu cầu của người dùng.

Sau khi mã thông báo được xác thực bởi dịch vụ, nó được sử dụng để thiết lập bối cảnh bảo mật cho khách hàng, vì vậy dịch vụ có thể đưa ra quyết định ủy quyền hoặc hoạt động kiểm toán cho các yêu cầu người dùng liên tiếp.

thăm nguồn


22

Dựa trên mã thông báo (Bảo mật / xác thực)

có nghĩa là để chúng tôi chứng minh rằng chúng tôi đã truy cập, trước tiên chúng tôi phải nhận được mã thông báo. Trong một kịch bản thực tế, mã thông báo có thể là một thẻ truy cập để xây dựng, nó có thể là chìa khóa để khóa vào nhà bạn. Để bạn lấy thẻ chìa khóa cho văn phòng hoặc chìa khóa về nhà, trước tiên bạn cần chứng minh bạn là ai và trên thực tế bạn có quyền truy cập vào mã thông báo đó. Nó có thể là một cái gì đó đơn giản như cho ai đó xem ID của bạn hoặc cho họ mật khẩu bí mật. Vì vậy, hãy tưởng tượng tôi cần có quyền truy cập vào văn phòng của tôi. Tôi đi xuống văn phòng an ninh, tôi cho họ xem ID của mình và họ đưa cho tôi mã thông báo này, cho phép tôi vào tòa nhà. Bây giờ tôi có quyền truy cập không hạn chế để làm bất cứ điều gì tôi muốn trong tòa nhà, miễn là tôi có mã thông báo với tôi.

Lợi ích của bảo mật dựa trên mã thông báo là gì?

Nếu chúng ta nghĩ lại về API không an toàn, điều chúng ta phải làm trong trường hợp đó là chúng ta phải cung cấp mật khẩu cho mọi thứ mà chúng ta muốn làm.

Hãy tưởng tượngrằng mỗi khi chúng ta bước vào một cánh cửa trong văn phòng của mình, chúng ta phải cho mọi người ngồi cạnh cửa mật khẩu của mình. Bây giờ điều đó sẽ khá tệ, bởi vì điều đó có nghĩa là bất kỳ ai trong văn phòng của chúng tôi cũng có thể lấy mật khẩu của chúng tôi và mạo danh chúng tôi, và điều đó khá tệ. Thay vào đó, những gì chúng tôi làm là chúng tôi lấy mã thông báo, tất nhiên cùng với mật khẩu, nhưng chúng tôi lấy lại từ một người. Và sau đó chúng tôi có thể sử dụng mã thông báo này bất cứ nơi nào chúng tôi muốn bên trong tòa nhà. Tất nhiên, nếu chúng tôi mất mã thông báo, chúng tôi có cùng một vấn đề như nếu ai đó biết mật khẩu của chúng tôi, nhưng điều đó dẫn chúng tôi đến những điều như làm thế nào để đảm bảo rằng nếu chúng tôi mất mã thông báo, chúng tôi có thể thu hồi quyền truy cập và có thể là mã thông báo không nên sống lâu hơn 24 giờ, vì vậy ngày hôm sau chúng tôi đến văn phòng, chúng tôi cần xuất trình lại ID của mình. Tuy nhiên, chỉ có một người mà chúng tôi hiển thị ID cho,


15

Câu hỏi đã cũ và công nghệ đã tiến bộ, đây là tình trạng hiện tại:

Mã thông báo web JSON (JWT) là một tiêu chuẩn mở dựa trên JSON (RFC 7519) để chuyển yêu cầu giữa các bên trong môi trường ứng dụng web. Các mã thông báo được thiết kế nhỏ gọn, an toàn URL và có thể sử dụng được, đặc biệt là trong bối cảnh đăng nhập một lần (SSO) của trình duyệt web.

https://en.wikipedia.org/wiki/JSON_Web_Token


1
Tôi không nghĩ rằng JWT đại diện cho tình trạng công nghệ hiện tại để triển khai xác thực dựa trên mã thông báo. Đó chỉ là một cách để thực hiện nó và với nhiều sai sót được đưa ra một cách hùng hồn bởi các bài báo như cryto.net/~joepie91/blog/2016/06/13/stop-USE-jwt-for-simes
Sung Cho

3

Nó chỉ là hàm băm được liên kết với người dùng trong cơ sở dữ liệu hoặc một số cách khác. Mã thông báo đó có thể được sử dụng để xác thực và sau đó ủy quyền cho người dùng truy cập nội dung liên quan đến ứng dụng. Để lấy mã thông báo này khi đăng nhập phía khách hàng là bắt buộc. Sau lần đăng nhập đầu tiên, bạn cần lưu mã thông báo đã truy xuất chứ không phải bất kỳ dữ liệu nào khác như phiên, id phiên vì ở đây mọi thứ đều là mã thông báo để truy cập các tài nguyên khác của ứng dụng.

Mã thông báo được sử dụng để đảm bảo tính xác thực của người dùng.


3

Cách tiếp cận được ưa thích nhất hiện nay để bảo mật tài nguyên API Web là xác thực người dùng trong máy chủ API Web bằng cách sử dụng mã thông báo đã ký (chứa đủ thông tin để xác định một người dùng cụ thể) mà khách hàng cần gửi đến máy chủ mọi yêu cầu. Đây được gọi là phương pháp xác thực dựa trên mã thông báo.

Xác thực dựa trên mã thông báo hoạt động như sau:

Một người dùng nhập tên và mật khẩu vào máy khách (máy khách có nghĩa là trình duyệt hoặc thiết bị di động, v.v.).

Sau đó, khách hàng sẽ gửi những thông tin đăng nhập này (tức là tên người dùng và mật khẩu) đến Máy chủ ủy quyền.

Sau đó, Máy chủ ủy quyền xác thực thông tin đăng nhập của khách hàng (tức là tên người dùng và mật khẩu) và sau đó nó tạo và trả về mã thông báo truy cập. Mã thông báo truy cập này chứa đủ thông tin để xác định người dùng và cũng chứa thời gian hết hạn mã thông báo.

Sau đó, ứng dụng khách bao gồm Mã thông báo truy cập trong tiêu đề Ủy quyền của yêu cầu HTTP để truy cập các tài nguyên bị hạn chế từ Máy chủ tài nguyên cho đến khi mã thông báo hết hạn.

Bài viết sau đây cho thấy cách triển khai Xác thực dựa trên mã thông báo trong API WEB từng bước.

https://dotnettutorials.net/lesson/token-basing-authentication-web-api/


-2

Khi bạn đăng ký một trang web mới, thường thì bạn sẽ được gửi một email để kích hoạt tài khoản của bạn. Email đó thường chứa một liên kết để nhấp vào. Một phần của liên kết đó, chứa mã thông báo, máy chủ biết về mã thông báo này và có thể liên kết nó với tài khoản của bạn. Mã thông báo thường sẽ có thời hạn sử dụng được liên kết với nó, vì vậy bạn chỉ có thể có một giờ để nhấp vào liên kết và kích hoạt tài khoản của mình. Không thể thực hiện được điều này với cookie hoặc biến phiên, vì khách hàng không biết sử dụng thiết bị hoặc trình duyệt nào để kiểm tra email.


11
Mã thông báo / liên kết một lần là một khái niệm khác với xác thực dựa trên mã thông báo.
Emile Bergeron

Tên của những gì bạn nói cũng là mã thông báo. Nhưng đó không phải là câu hỏi
sajjad Yosefi
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.