ROA OAuth2 so với Auth cơ bản cho API REST công khai?


21

Trường hợp sử dụng cụ thể mà tôi quan tâm ở đây là xác thực ứng dụng khách REST dựa trên các điểm cuối máy chủ có sẵn công khai (chẳng hạn như API REST công khai).

Giải pháp đơn giản nhất ở đây là Basic Auth . Nhưng tôi thường nghe OAuth2 được quảng cáo là một giải pháp xác thực ưu việt trong hầu hết mọi trường hợp.

Vấn đề là, loại cấp OAuth2 duy nhất khả thi cho máy khách REST xác thực với máy chủ REST là Thông tin mật khẩu của chủ sở hữu tài nguyên (ROPC) , bởi vì Cấp mã và cấp phát ngầm định yêu cầu UI / trang web (được lưu trữ bởi Auth Server) người dùng đăng nhập và ủy quyền cho ứng dụng khách.

Cách ROPC hoạt động là, bằng cách gửi tên người dùng / mật khẩu của tài nguyên và ID khách dưới dạng tham số chuỗi truy vấn ?!? Điều này thậm chí còn kém an toàn hơn (IMHO) sau đó là Auth cơ bản, ít nhất là cơ sở 64 mã hóa thông tin đăng nhập và gửi chúng bên trong một tiêu đề có thể được mã hóa bằng TLS!

Vì vậy, tôi hỏi: trong bối cảnh API REST công khai, ROA OAuth2 có thực sự tốt hơn Auth cơ bản không? Điều gì an toàn hơn ROA OAuth2?


Cập nhật

Tôi vừa đọc bài viết tuyệt vời này giải thích bảo mật REST không dựa trên OAuth2 của Amazon cho AWS. Nó thực chất là một giải pháp dựa trên khóa riêng trong đó các giá trị băm của mỗi yêu cầu REST được tạo và gửi dưới dạng sidecar bên cạnh yêu cầu thông thường (không được mã hóa). Chỉ khách hàng và máy chủ biết khóa riêng, vì vậy khi máy chủ nhận được yêu cầu (một lần nữa, chứa yêu cầu bình thường + yêu cầu băm), máy chủ sẽ tra cứu khóa riêng của khách hàng, áp dụng cùng một hàm băm cho yêu cầu thông thường và sau đó so sánh hai băm.

Điều này nghe có vẻ phức tạp, phức tạp và an toàn hơn ROPC của OAuth2! Trừ khi tôi là thiếu một cái gì đó lớn ở đây, OAuth2 ROPC chỉ là gửi client_id, usernamepasswordnhư params chuỗi truy vấn ... hoàn toàn và hoàn toàn không an toàn! Giải pháp dựa trên băm / băm này có vẻ ấn tượng và an toàn hơn nhiều.

Vấn đề là, ngay cả tác giả của bài báo đó cũng nói:

Bạn cũng sẽ từ từ nhận ra và chấp nhận rằng đến một lúc nào đó bạn sẽ phải thực hiện OAuth ...

Ba-ba-bwhat?!?! Nếu OAuth2 kém an toàn hơn giải pháp dựa trên băm / băm thông minh này, tại sao tác giả của bài viết này cảm thấy OAuth cần phải được chấp nhận tại một số điểm. Tôi thấy bối rối.


Bạn đang nói về loại khách hàng nào? Tôi cho rằng hầu hết các khách hàng sẽ có UI. Trong trường hợp đó, bạn có thể tải lên trang đăng nhập OAuth trong chế độ xem web (máy tính để bàn, thiết bị di động) hoặc chuyển hướng trực tiếp đến trang web (web). Tôi không thấy lý do tại sao bạn cần tránh UI.
cơn bão

@decyclone vui lòng đọc câu đầu tiên cho câu hỏi! Tôi đang lấy về các máy khách REST (HTTP không đầu) xác thực với các dịch vụ REST.
smeeb

Câu hỏi tôi đặt ra là liệu khách hàng đó có UI nào không? Ngay cả khi nó không có, tôi đã thấy các ứng dụng không có UI bật ít nhất một hộp thoại để xác thực.
cơn bão

@decyclone không có máy khách REST thuần túy nào không có giao diện người dùng, mặc dù UI thường sử dụng máy khách REST thuần túy để kết nối với dịch vụ REST. Một trường hợp sử dụng là một công cụ dòng lệnh sử dụng máy khách REST để gửi các lệnh người dùng (được nhập trên trình bao) đến dịch vụ REST. Popping UI từ shell không phải là một giải pháp chấp nhận được ở đây.
smeeb

1
Nhưng, tôi cần lưu ý, có rất nhiều trường hợp sử dụng khác ngoài một dòng lệnh / shell. Một trường hợp sử dụng khác là máy khách REST / HTTP thuần Java / Ruby / Python không có UI và có thể đang chạy trên máy chủ phụ trợ không có UI. Máy chủ phụ trợ cần liên lạc với một máy chủ phụ trợ khác qua REST. Ở đây, không chỉ khó xử và lúng túng khi bật UI khi máy chủ phụ trợ số 1 cần nói chuyện với máy chủ phụ trợ số 2, vấn đề thực sự là không có trình duyệt / giao diện người dùng nào để hiển thị trang đăng nhập và không có con người ở đó để đăng nhập !!!
smeeb

Câu trả lời:


24

Câu trả lời cho câu hỏi của bạn có thể ở cấp mã, cấp giao thức hoặc cấp kiến ​​trúc. Tôi sẽ cố gắng tóm tắt ở đây hầu hết các vấn đề ở cấp độ giao thức vì điều đó thường rất quan trọng trong phân tích ưu và nhược điểm. Hãy nhớ rằng OAuth2 nhiều hơn Thông tin mật khẩu của chủ sở hữu tài nguyên , theo thông số kỹ thuật, tồn tại vì "lý do di sản hoặc di chuyển", được coi là "rủi ro cao hơn các loại cấp khác" và thông số kỹ thuật nêu rõ rằng máy khách và máy chủ ủy quyền "NÊN giảm thiểu việc sử dụng loại tài trợ này và sử dụng các loại tài trợ khác bất cứ khi nào có thể".

Vẫn còn nhiều ưu điểm của việc sử dụng ROPC so với xác thực cơ bản nhưng trước khi chúng ta hiểu rõ về điều đó, hãy hiểu sự khác biệt về giao thức cơ bản giữa OAuth2 và xác thực cơ bản. Hãy đồng ý với tôi khi tôi giải thích những điều này và sẽ đến ROPC sau.

Luồng xác thực người dùng

Có bốn vai trò được xác định trong đặc tả OAuth2. Với các ví dụ, chúng là:

  1. Chủ sở hữu tài nguyên: Người dùng có quyền truy cập vào một số tài nguyên, ví dụ trong trường hợp của bạn, những người dùng khác nhau có thể có mức truy cập khác nhau đối với API REST;
  2. Máy khách: thường là ứng dụng mà người dùng đang sử dụng và cần quyền truy cập vào tài nguyên để cung cấp dịch vụ cho người dùng;
  3. Máy chủ tài nguyên: API REST trong trường hợp của bạn; và
  4. Máy chủ ủy quyền: máy chủ mà thông tin đăng nhập của người dùng được trình bày và sẽ xác thực người dùng.

Khi một ứng dụng khách chạy, nó được cấp quyền truy cập vào các tài nguyên dựa trên người dùng. Nếu người dùng có đặc quyền của quản trị viên, tài nguyên và thao tác có sẵn cho người dùng trong API REST có thể nhiều hơn người dùng không có đặc quyền của quản trị viên.

OAuth2 cũng cho phép khả năng sử dụng một máy chủ ủy quyền duy nhất có nhiều máy khách và cho nhiều tài nguyên. Ví dụ, một máy chủ tài nguyên có thể chấp nhận xác thực người dùng với Facebook (có thể đóng vai trò là máy chủ ủy quyền trong trường hợp đó). Vì vậy, khi người dùng chạy một ứng dụng (tức là máy khách), nó sẽ gửi người dùng đến Facebook. Người dùng nhập thông tin đăng nhập của họ vào Facebook và khách hàng sẽ nhận lại "mã thông báo" mà nó có thể hiển thị cho máy chủ tài nguyên. Máy chủ tài nguyên nhìn vào mã thông báo và chấp nhận nó sau khi xác minh rằng trên thực tế Facebook đã phát hành nó và cho phép người dùng truy cập vào tài nguyên. Trong trường hợp này, khách hàng không bao giờ thấy thông tin đăng nhập của người dùng (tức là thông tin đăng nhập Facebook của họ).

Nhưng giả sử bạn đang quản lý danh tính người dùng của mình (và có máy chủ ủy quyền) thay vì Facebook, nơi đã cấp mã thông báo cho khách hàng của bạn. Bây giờ, giả sử bạn cũng có một đối tác và bạn muốn cho phép ứng dụng của họ (tức là khách hàng) truy cập API REST của bạn. Với xác thực cơ bản (hoặc thậm chí ROPC), người dùng sẽ cung cấp thông tin đăng nhập cho khách hàng đó sẽ gửi nó đến máy chủ ủy quyền. Máy chủ ủy quyền sau đó sẽ cung cấp mã thông báo mà khách hàng có thể sử dụng để truy cập tài nguyên. Thật không may, điều này có nghĩa là thông tin đăng nhập của người dùng cũng hiển thị cho khách hàng đó. Tuy nhiên, bạn sẽ không muốn ứng dụng của đối tác (người có thể ở bên ngoài tổ chức của bạn) thậm chí biết mật khẩu của người dùng. Đó là một vấn đề bảo mật bây giờ. Để đạt được mục tiêu đó,

Do đó, với OAuth2, lý tưởng nhất là không sử dụng ROPC trong các trường hợp như vậy thay vì sử dụng một mã khác, chẳng hạn như luồng mã ủy quyền. Điều này bảo vệ bất kỳ ứng dụng nào biết thông tin đăng nhập của người dùng chỉ được trình bày cho máy chủ ủy quyền. Do đó, thông tin đăng nhập của người dùng không bị rò rỉ. Các vấn đề tương tự áp dụng với xác thực cơ bản, nhưng trong phần tiếp theo, tôi sẽ giải thích cách ROPC vẫn tốt hơn vì thông tin đăng nhập của người dùng vẫn không cần được khách hàng lưu trữ trong ROPC để khách hàng truy cập liên tục.

Lưu ý rằng khi người dùng đến máy chủ ủy quyền, máy chủ ủy quyền cũng có thể yêu cầu người dùng xác nhận rằng họ có muốn cho phép khách hàng truy cập tài nguyên thay mặt họ hay không. Đó là lý do tại sao nó được gọi là máy chủ ủy quyền vì quá trình ủy quyền cho khách hàng truy cập tài nguyên được yêu cầu trong quy trình. Nếu người dùng không ủy quyền cho khách hàng, họ sẽ không có quyền truy cập vào tài nguyên. Tương tự, nếu bản thân người dùng không có quyền truy cập vào tài nguyên, máy chủ ủy quyền vẫn có thể từ chối quyền truy cập và không phát hành mã thông báo.

Trong xác thực cơ bản, ngay cả máy chủ ủy quyền và máy chủ tài nguyên được kết hợp thành một thực thể duy nhất. Vì vậy, máy chủ tài nguyên muốn ủy quyền cho người dùng, vì vậy hãy hỏi thông tin đăng nhập từ máy khách. Máy khách cung cấp những thông tin được sử dụng bởi máy chủ tài nguyên để xác thực người dùng. Điều này có nghĩa là nhiều máy chủ tài nguyên về cơ bản sẽ yêu cầu thông tin đăng nhập từ người dùng.

Phát hành mã thông báo

Các khách hàng nhận mã thông báo từ máy chủ ủy quyền, giữ chúng xung quanh và sử dụng chúng để truy cập tài nguyên (chi tiết hơn về chính mã thông báo bên dưới). Các khách hàng không bao giờ biết mật khẩu của người dùng (trong các luồng khác ngoài ROPC) và không cần lưu trữ mật khẩu. Trong ROPC, mặc dù khách hàng biết mật khẩu của người dùng, họ vẫn không cần lưu trữ vì họ sử dụng các mã thông báo này để truy cập tài nguyên. Ngược lại, trong xác thực cơ bản, nếu khách hàng không muốn người dùng cung cấp thông tin đăng nhập trong mỗi phiên, thì khách hàng phải lưu trữ mật khẩu của người dùng để họ có thể cung cấp mật khẩu vào lần sau. Đây là một nhược điểm lớn đối với việc sử dụng xác thực cơ bản trừ khi máy khách chỉ là một ứng dụng web trong trường hợp đó, cookie có thể giải quyết một số vấn đề này. Với các ứng dụng gốc, đó thường không phải là một lựa chọn.

Có một khía cạnh khác của OAuth2 liên quan đến cách phát hành mã thông báo và chúng hoạt động. Khi người dùng cung cấp thông tin đăng nhập cho máy chủ ủy quyền (ngay cả trong ROPC), máy chủ ủy quyền có thể cung cấp một hoặc nhiều loại mã thông báo: 1) mã thông báo truy cập và 2) mã thông báo làm mới.

Mã thông báo truy cập được gửi đến máy chủ tài nguyên sẽ cấp quyền truy cập vào tài nguyên sau khi xác thực nó và thông thường chúng có thời gian tồn tại ngắn, ví dụ 1 giờ. Mã thông báo làm mới được khách hàng gửi đến máy chủ ủy quyền để nhận mã thông báo truy cập khác khi hết hạn và thường có tuổi thọ lớn (ví dụ: vài ngày đến vài tháng hoặc thậm chí nhiều năm).

Khi khách hàng cung cấp mã thông báo truy cập đến máy chủ tài nguyên, nó sẽ xem xét mã thông báo và sau khi xác thực, nhìn vào bên trong mã thông báo để xác định xem có cho phép truy cập hay không. Miễn là mã thông báo truy cập là hợp lệ, khách hàng có thể tiếp tục sử dụng nó. Giả sử người dùng đóng ứng dụng và khởi động vào ngày hôm sau và mã thông báo truy cập đã hết hạn. Bây giờ, khách hàng sẽ thực hiện cuộc gọi đến máy chủ ủy quyền và đưa ra mã thông báo làm mới giả sử rằng nó chưa hết hạn. Máy chủ ủy quyền, vì nó đã phát hành mã thông báo, xác minh nó và có thể xác định rằng người dùng không cần cung cấp lại thông tin đăng nhập và do đó cung cấp mã thông báo truy cập khác cho khách hàng. Bây giờ khách hàng có quyền truy cập vào máy chủ tài nguyên. Đây là cách thông thường các ứng dụng khách cho Facebook và Twitter yêu cầu thông tin đăng nhập một lần và sau đó không yêu cầu người dùng cung cấp thông tin đăng nhập lại. Các ứng dụng này không bao giờ cần biết thông tin đăng nhập của người dùng và vẫn có thể truy cập tài nguyên mỗi khi người dùng khởi động ứng dụng.

Giờ đây, người dùng có thể vào máy chủ ủy quyền (ví dụ: trong hồ sơ người dùng Facebook của họ), thay đổi mật khẩu mà không ảnh hưởng đến bất kỳ ứng dụng khách nào. Tất cả chúng sẽ tiếp tục hoạt động đúng. Nếu người dùng mất thiết bị mà họ đã có ứng dụng có mã thông báo làm mới, họ có thể yêu cầu máy chủ ủy quyền (ví dụ: Facebook) "đăng xuất" chúng khỏi các ứng dụng mà máy chủ ủy quyền (ví dụ Facebook) sẽ thực hiện bằng cách không tôn trọng bất kỳ ứng dụng nào hiện có làm mới mã thông báo và buộc người dùng cung cấp thông tin đăng nhập một lần nữa khi họ cố gắng truy cập tài nguyên thông qua các ứng dụng đó.

JWT đơn giản là định dạng mã thông báo thường được sử dụng với OAuth2 và OpenID Connect. Các phương thức ký mã thông báo và xác thực nó cũng được chuẩn hóa với các thư viện có sẵn cho các thư viện thay vì mọi máy chủ tài nguyên triển khai một giải pháp khác. Do đó, lợi thế nằm ở khả năng sử dụng lại mã đã được hiệu đính và tiếp tục được hỗ trợ.

Ý nghĩa bảo mật

Xác thực cơ bản sẽ yếu hơn khi có bất kỳ kịch bản nào ở trên. Ngoài ra còn có một mô hình mối đe dọa rộng rãi cho OAuth2 dành cho các nhà phát triển có thể sử dụng các đề xuất trong đó để tránh các lỗ hổng phổ biến trong việc triển khai của họ. Nếu bạn xem qua mô hình mối đe dọa, bạn sẽ thấy rằng nhiều lỗ hổng liên quan đến triển khai (như chuyển hướng mở và CSRF) cũng được đề cập trong đó. Tôi đã không trải qua so sánh những người chống lại xác thực cơ bản trong phản hồi này.

Ưu điểm chính cuối cùng của OAuth2 là giao thức được chuẩn hóa và nhiều máy chủ ủy quyền, máy khách và máy chủ tài nguyên tôn vinh nó. Nhiều thư viện có sẵn cho các nhà phát triển, được duy trì để các vấn đề bảo mật được tìm thấy trong các triển khai, các thư viện được cập nhật trong khi cho phép khả năng tương tác.

Phần kết luận

Nếu bạn đang viết một ứng dụng mới, IMO, trường hợp lý tưởng sẽ là tránh cả xác thực cơ bản và ROPC vì các vấn đề cố hữu trong chúng. Tuy nhiên, mỗi ứng dụng có nhu cầu, mốc thời gian, trình độ của nhà phát triển khác nhau, v.v ... nên quyết định là tùy theo từng trường hợp. Nhưng ngay cả khi bạn không có nhu cầu nhiều hơn xác thực cơ bản, bằng cách chọn nó, bạn có thể tự khóa mình vào một kiến ​​trúc có thể không dễ dàng mở rộng (ví dụ: nếu bạn có nhiều máy chủ trong tương lai, bạn không nhất thiết muốn có người dùng cung cấp thông tin đăng nhập cho từng người trong số họ thay vì chỉ cung cấp cho máy chủ ủy quyền một lần, có thể trao mã thông báo, v.v.)

Lưu ý rằng tôi đã không giải quyết nhận xét của bạn về cách thông tin đăng nhập được gửi qua mạng vì chúng có thể được bảo mật bằng TLS hoặc giao thức tương tự hoặc bằng chứng sở hữu, v.v. Như ai đó đã đề xuất, mã hóa cơ sở 64 là 0 bảo mật, vui lòng không bị lừa dối bởi điều đó. Sự khác biệt được đề cập ở trên thường ở cấp độ kiến ​​trúc và do đó, đó là nơi tôi tập trung vì kiến ​​trúc là khó thay đổi nhất khi được thực hiện.

Azure Active Directory B2C Basic , một dịch vụ mà tôi hoạt động và gần đây đã được phát hành để xem trước công khai, cho phép ứng dụng bên thứ ba sử dụng AAD làm máy chủ ủy quyền có khả năng tương tác với IDP xã hội (như Facebook, Google, v.v.). Nó cũng cho phép người dùng tạo tài khoản của riêng họ thay vì sử dụng IDP xã hội và những tài khoản này sau đó có thể được sử dụng cho mục đích xác thực. Có một vài dịch vụ khác cũng như vậy (ví dụ: một dịch vụ khác tôi biết là auth0) có thể được các nhà phát triển sử dụng để thuê ngoài hoàn toàn xác thực và quản lý người dùng cho các ứng dụng và tài nguyên của họ. Các đặc điểm giao thức tương tự mà tôi đã đề cập ở trên được các nhà phát triển sử dụng để tách rời máy chủ ủy quyền (AAD), tài nguyên (ví dụ: API REST), máy khách (ví dụ: ứng dụng di động của họ) và người dùng. Tôi hy vọng lời giải thích này sẽ giúp phần nào.


Cảm ơn vì một góc rộng, nhưng tôi không nghĩ những lợi thế này, (a) letting the user agent hold just the token instead of the password, (b) allowing a password change without disrupting existing client apps, (c) allowing users log out other sessionscụ thể cho các luồng xác thực mã thông báo. Cả xác thực cơ bản và mã thông báo đều không đề cập đến các chức năng (b) và (c) trong thông số kỹ thuật của chúng. Việc triển khai (b) và (c) dường như có thể đối với bất kỳ loại xác thực nào. Nó sẽ liên quan đến việc theo dõi mật khẩu (tốt nhất là băm của họ). Ưu điểm (a) dường như phụ thuộc vào phạm vi rộng hơn của mật khẩu.
lươn ghEEz

Làm cách nào chúng tôi có thể sử dụng OAuth nếu người dùng (Chủ sở hữu tài nguyên) không có bất kỳ thông tin xác thực nào với máy chủ Ủy quyền bên ngoài, nhưng anh ta có thông tin đăng nhập trong ứng dụng Khách hàng? Đó là chúng tôi có Chủ sở hữu tài nguyên (người dùng), Khách hàng (đại diện cho người dùng & cũng chứa thông tin đăng nhập cho người dùng) và Máy chủ tài nguyên. Làm thế nào một máy chủ tài nguyên có thể xác thực và ủy quyền cho người dùng?
Arun Avanathan

3

Tôi tin rằng bạn đang hiểu sai về mã hóa xung quanh các biến GET trong một URL

Những người duy nhất có thể xem các biến GET trong yêu cầu là máy tính gốc và máy chủ nhận ( liên kết ).

Chỉ tra cứu DNS dựa trên miền mà yêu cầu HTTPS được gửi đến không được mã hóa. Mọi thứ khác, các cổng, biến GET, ID tài nguyên, được mã hóa.

Nhắc nhở duy nhất đó là máy chủ nhận có thể đăng xuất đường dẫn yêu cầu đầy đủ, nhưng bạn có quyền kiểm soát điều đó để bạn có thể bảo vệ dữ liệu đó theo cách bạn thấy phù hợp.


3

Xác thực cơ bản không phải là một cách tốt để bảo mật API REST của bạn. Tôi đã giải thích lý do tại sao trong câu trả lời này .

Khi bạn xây dựng API REST, bạn đang triển khai máy chủ tài nguyên theo thuật ngữ OAuth2. Tất cả các API bạn cần làm là xác thực rằng mã thông báo được chuyển cùng với yêu cầu trong tiêu đề HTTP ủy quyền là hợp lệ và từ nhà phát hành đáng tin cậy. Xem liên kết này để biết các bước thực hiện xác nhận nếu không có thư viện.

Cách khách hàng của bạn mua mã thông báo từ máy chủ ủy quyền tùy thuộc vào loại máy khách đó là gì. Hãy nhớ rằng, bạn cần chỉ định loại máy khách bạn sẽ sử dụng khi bạn đăng ký máy khách với máy chủ ủy quyền.

Trong trường hợp ứng dụng web nói chuyện với máy chủ của bạn, nó có thể sử dụng cấp mã ủy quyền . Nếu đó là một ứng dụng khách không đáng tin cậy như ứng dụng di động hoặc ứng dụng JavaScript, thì nó nên sử dụng khoản trợ cấp ngầm .

Đối với các dịch vụ phụ trợ không thể tương tác với chủ sở hữu tài nguyên, bạn có thể sử dụng cấp thông tin đăng nhập của khách hàng . Đối với các công cụ dòng lệnh, bạn có thể sử dụng thông tin xác thực ứng dụng khách hoặc cấp mật khẩu của chủ sở hữu tài nguyên .

Tất cả phụ thuộc vào loại khách hàng bạn đang sử dụng.

Cuối cùng, việc xác thực mã thông báo JWT xảy ra trên máy chủ tài nguyên mà không cần phải nói chuyện với máy chủ ủy quyền. Điều này dẫn đến một kiến ​​trúc có khả năng mở rộng tốt hơn sau đó là các giải pháp cần tra cứu dữ liệu riêng tư cho mỗi khách hàng.


1

Nó an toàn hoặc không an toàn. Không nhiều không ít. Có cơ sở64 không làm cho Auth cơ bản (hoặc bất cứ điều gì) an toàn hơn.

Không có gì sai khi gửi bất cứ thứ gì không được mã hóa nếu nó sử dụng đường ống được mã hóa như Https.

OAuth nhiều tính năng hơn, hãy sử dụng nó nếu bạn cần. Đối với bất cứ điều gì khác, ví dụ như ngân hàng, sử dụng phản hồi thách thức cơ bản là tốt và an toàn.


0

Tôi nghĩ bạn cần hiểu các thuật ngữ đầu tiên. Bạn đang so sánh- Ủy quyềnchữ ký số

OAuth là tiêu chuẩn mở cho Ủy quyền , trong đó những gì amazon đang làm (theo bài viết và chi tiết được cung cấp trong câu hỏi của bạn) đang tạo ra một chữ ký kỹ thuật số hợp lệ cho người nhận (ở đây là Amazon) tin rằng tin nhắn được tạo bởi một người biết người gửi, người gửi không thể từ chối đã gửi tin nhắn ( xác thực và không thoái thác)

Đối với cơ chế ủy quyền nào được sử dụng, nó ít nhiều phụ thuộc vào trường hợp sử dụng của bạn.

Dưới đây là những gì có thể tìm thấy trên StackOverflow tại đây :

Xác thực cơ bản đòi hỏi băm rất đơn giản để tính toán tiêu đề bắt buộc duy nhất - OAuth chắc chắn là một xác thực đắt tiền hơn. Điều quan trọng cần nhận ra là hai cơ chế xác thực phục vụ các mục đích hoàn toàn khác nhau. Basic Auth là để xác thực ứng dụng khách với ứng dụng chính. OAuth là để ủy quyền cho bên thứ ba truy cập dữ liệu khách hàng từ một ứng dụng chính. Cả hai đều có vị trí của chúng và chọn cái này qua cái khác nên được điều khiển bởi trường hợp sử dụng cụ thể của việc thực hiện.

Và đây là một bài viết thú vị khác so sánh hai.

Xác thực cơ bản qua SSL thực sự khá có trách nhiệm, từ quan điểm bảo mật đơn giản. Khi chúng tôi tranh chấp với tên người dùng và mật khẩu, Auth cơ bản là một giải pháp phổ biến vì nó rất dễ thực hiện. Việc truyền thông tin đăng nhập được mã hóa qua SSL và việc sử dụng tiêu đề của Author Authorization có mặt khắp nơi trong các máy khách và hệ thống HTTP.

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.