Tôi thực sự thích cách tiếp cận đầu tiên nói chung.
- thật đơn giản để hiểu và thực hiện
- nó an toàn (theo hiểu biết của tôi)
- đó là một cách tiếp cận không phổ biến mà tôi đã thấy được sử dụng trong quá khứ
Một điều tôi không thấy được đề cập về điều đầu tiên mà bạn nên ghi nhớ, dấu thời gian được sử dụng để băm mã thông báo cần có thời hạn sử dụng TTL quá ngắn (như 1 giây) để bạn xác minh tin nhắn không được gửi cùng với cùng dấu thời gian và mã thông báo từ một tin nhắn 12 giờ trước đó; rõ ràng nó sẽ tính toán là hợp pháp nhưng không phải trong trường hợp này.
Nếu đây là hai lựa chọn duy nhất bạn đang xem xét mặc dù tôi chỉ muốn chắc chắn rằng bạn cũng đã xem các cách tiếp cận khác, vì có rất nhiều lựa chọn. Thực tế hơn là tôi sẽ liệt kê. Đây là một số cách tiếp cận xác thực phổ biến đáng để nghiên cứu chỉ để xem liệu chúng có phù hợp với mục đích của bạn hơn không, và nếu không có gì khác hiểu chúng có thể cung cấp cho bạn một số ý tưởng để giúp thắt chặt bất kỳ cách tiếp cận nào bạn thực hiện.
Xin lưu ý, tôi không phải là một chuyên gia bảo mật.
OAuth / Liên kết
Theo cách tiếp cận này, bạn có một người bảo lãnh bên thứ 3 trong đó mã tiêu thụ yêu cầu mã thông báo / cert / bạn có gì từ họ và chuyển nó cho bạn, tại thời điểm này, tất cả những gì bạn cần làm là hỏi bên thứ 3 xem khóa bạn đã đưa là hợp pháp
Chuyên nghiệp:
- Tiêu chuẩn dựa trên
- Các vấn đề sẽ được tìm thấy bởi những người khác trên hệ thống của người khác, vì vậy bạn sẽ tìm ra nếu sự không an toàn xảy ra
- Bạn sẽ cần ít công việc xác thực hơn
Con:
- Bạn phải đối phó với người phục vụ bên thứ 3 và API của họ hoặc tạo và lưu trữ "bên thứ 3" của riêng bạn để tách biệt auth ra khỏi dịch vụ chính của bạn.
- Đối với nhiều dịch vụ quá mức cần thiết, nhưng về mặt khái niệm đáng để xem xét
Chứng chỉ không đồng bộ
Tại đây, khách hàng của bạn sẽ mã hóa thông tin liên lạc của họ bằng một chứng chỉ công khai mà bạn đã chia sẻ với họ khi họ tạo người dùng. Về phía bạn, bạn sẽ giải mã bằng khóa riêng được liên kết với người dùng đó. Nói chung, bạn sẽ bắt đầu giao tiếp với một phản ứng thách thức để cho thấy họ có thể mã hóa / giải mã như bạn mong muốn xác định họ là người mà họ tuyên bố là. Mặc dù các phương pháp "đồng bộ" có thể không sử dụng phản hồi thách thức, nhưng chúng có ít bảo mật hơn và một số vấn đề đồng bộ hóa thời gian có thể khiến chúng khó khăn hơn.
từ Novell (vâng tôi biết, novell? thật sao?)
Mã thông báo sử dụng một biến làm cơ sở để tạo mật khẩu một lần. Biến này được gọi là thách thức. Hai phương thức chính để xác định biến được sử dụng để tạo mật khẩu là không đồng bộ hoặc đồng bộ.
Với phương thức phản hồi không đồng bộ hoặc phản hồi thách thức, phần mềm máy chủ sẽ gửi mã thông báo cho thử thách bên ngoài --- một biến được tạo ngẫu nhiên --- để thiết bị mã thông báo mã hóa. Mã thông báo sử dụng biến thách thức này, thuật toán mã hóa và bí mật được chia sẻ để tạo phản hồi --- mật khẩu được mã hóa chính xác.
Với phương thức đồng bộ, biến thách thức được sử dụng để tạo mật khẩu được xác định bên trong bởi mã thông báo và máy chủ. Bộ đếm thời gian, bộ đếm sự kiện hoặc kết hợp bộ đếm thời gian và bộ đếm sự kiện trong mỗi thiết bị được sử dụng làm cơ sở cho biến thách thức. Bởi vì mã thông báo và máy chủ mỗi loại riêng biệt và bên trong xác định biến thách thức từ bộ đếm riêng của chúng, điều rất quan trọng đối với bộ đếm thời gian của chúng và bộ đếm sự kiện để được đồng bộ hóa. Vì rất dễ dàng cho máy chủ và mã thông báo không đồng bộ hóa, nên hầu hết các triển khai đều cho phép một lượng trôi nhất định giữa các quầy. Thông thường, một phạm vi nhỏ hoặc cửa sổ của các giá trị truy cập này được sử dụng để tính mật khẩu. Tuy nhiên, nếu mã thông báo và máy chủ không đồng bộ hóa ngoài cửa sổ này,
Chuyên nghiệp:
- Chứng chỉ có gốc CA khiến chúng đáng tin cậy và khó giả mạo
- Có các cơ sở tiêu chuẩn trong các hệ điều hành để quản lý và duy trì các cửa hàng chứng nhận một cách dễ dàng
- Phương pháp nghiên cứu tốt, rất nhiều thông tin có sẵn về nó
- Hết hạn cùng với một loạt các thứ khác là các cơ sở được xây dựng của các chứng chỉ tiêu chuẩn, nhìn chung chúng rất mạnh mẽ
Con:
- Chứng chỉ có thể khó để làm việc với lập trình
- Tùy thuộc vào nếu bạn yêu cầu CA bên ngoài, có thể không miễn phí
- Có thể cần duy trì các cửa hàng chứng chỉ theo cách thủ công để đảm bảo các ủy thác gốc dự kiến được định cấu hình
NTLM
Đừng cười, nếu đây là dịch vụ nhỏ hơn hoặc chỉ nội bộ và bạn đang ở trong môi trường windows, không có gì sai khi sử dụng xác thực NTLM tiêu chuẩn để đảm bảo quyền truy cập. Đặc biệt, nếu bạn đang làm việc với IIS, đây là cách tiếp cận đơn giản nhất. Dễ dàng bảo trì và cấu hình tốt trong web.config.
Chuyên nghiệp:
- Cực kỳ dễ dàng để cấu hình, thực hiện và bảo trì
Con:
- Khả năng tương tác tối thiểu
- Không đủ để xác thực đối mặt với công chúng
Nonces
Khi làm việc với nonces trong phương pháp xác thực của bạn, bạn cung cấp một phương thức để có được một thông tin về dịch vụ. Phương thức này trả về một chuỗi hoặc một đoạn dữ liệu tùy ý ("một nonce") cho mỗi yêu cầu. Bây giờ mọi yêu cầu đối với các phương thức khác đều yêu cầu một nonce để được truy xuất và được sử dụng trong thuật toán mật mã cho yêu cầu. Giá trị ở đây là máy chủ theo dõi các nonces được sử dụng và không bao giờ cho phép tái sử dụng nonce, điều này hoàn toàn ngăn chặn các cuộc tấn công phát lại bởi vì một khi yêu cầu với một nonce được thực hiện, một yêu cầu với nonce đó sẽ không bao giờ được thực hiện lại. Vì các nonces được yêu cầu, chúng được thêm vào danh sách các nonces có sẵn, vì chúng được sử dụng nên chúng được chuyển từ danh sách có sẵn sang danh sách đã sử dụng.
Chuyên nghiệp:
- Thwarts phát lại các cuộc tấn công khá tốt
- Không hoàn toàn khó thực hiện hoặc hiểu
Con:
- Yêu cầu khách hàng thực hiện hai yêu cầu cho mỗi một yêu cầu (mặc dù có thể được giảm bớt bằng cách yêu cầu nonces chỉ cho một số yêu cầu nhất định )
- Yêu cầu quản lý của nonces, cần được giao dịch
- Ảnh hưởng tiêu cực đến hiệu suất bằng cách yêu cầu các yêu cầu bổ sung cho các lực lượng (giao dịch làm tăng thêm chi phí tài nguyên khi làm việc với các lực lượng)