Tôi đang phát triển ASP Web API lõi và tôi bị nhầm lẫn bằng cách chọn phương thức xác thực. Tôi đã từng áp dụng xác thực Asp Net Identity mặc định, nhưng gần đây tôi đã biết về JWT. Vì vậy, tôi đã thực hiện xác thực gần như nó được thực hiện trong bài viết này: https://stormpath.com/blog/token-authentication-asp-net-core. Nhưng tôi không thể hiểu được lợi ích của JWT này. Với Asp Net Identity Authentication đơn giản, tôi không quan tâm đến việc lưu trữ token ... Tôi chỉ cần đăng nhập bằng signInManager và sử dụng các phương thức được ủy quyền cho đến khi đăng xuất. Với JWT, tôi cần suy nghĩ về kho lưu trữ mã thông báo, hết hạn và các khó khăn khác. Vậy, những lợi ích của JWT này là gì? Làm cách nào để lưu trữ mã thông báo JWT này sau khi đăng nhập? Hơn nữa, tôi có nên sử dụng JWT này không? Trong trường hợp của tôi, tôi cần xác thực đơn giản cho WebApi đơn giản sẽ được sử dụng bởi một hoặc nhiều người dùng nhiều hơn một chút. Tôi cũng đã nghe nói về OpenIddict, Auth0, IdentityServer, vậy sự khác biệt giữa tất cả các cơ chế xác thực này là gì?ASP .NET Core Identity xác thực mặc định so với xác thực JWT
Trả lời
Đây là cách tôi hiểu điều này, chia thành 3 phần hợp lý.
- Máy chủ xác thực - điều này sẽ xác thực và phát hành JWT toke, khi API cần xác thực mã thông báo, nó sẽ gửi mã thông báo đến máy chủ này để xác thực.
- Khách hàng - đây là những gì phục vụ các trang web của bạn hoặc bạn có thể ứng dụng. Đây là những gì sẽ cần để yêu cầu và lưu trữ mã thông báo JWT. Khách hàng sẽ cần phải chuyển mã thông báo tới api mỗi lần nó yêu cầu dữ liệu.
- API - đây là những gì cung cấp thông tin và cần xác thực mã thông báo với Máy chủ xác thực.
Vì vậy, lợi ích của JWT này là gì?
JWT được cấp cho khách hàng và được lưu trữ ở phía máy khách. Việc có JWT cho phép nhiều ứng dụng (ứng dụng hoặc trang web) của nhiều khách hàng sử dụng cùng một máy chủ xác thực phân phối JWT và cho biết các ứng dụng khách của API có thể sử dụng và làm thế nào.
Tôi làm cách nào để lưu mã thông báo JWT này sau khi đăng nhập?
Tôi chỉ cố gắng lưu trữ trong ứng dụng Ionic 2 sử dụng góc 2 trong đó có mô-đun lưu trữ. Nhưng tôi chắc rằng rất nhiều người đã làm điều này đã và hỏi câu hỏi này:
Simple JWT authentication in ASP.NET Core 1.0 Web API
Token Based Authentication in ASP.NET Core (refreshed)
Bên cạnh đó, nên tôi thậm chí sử dụng JWT này? Trong trường hợp của tôi, tôi cần xác thực đơn giản cho WebApi đơn giản sẽ được sử dụng bởi một hoặc một số ít người dùng hơn bit.
Lý do tách toàn bộ mối quan tâm là hiệu suất, do đó bạn không thực sự cần nó vì nó chỉ là một hoặc nhiều người dùng hơn một chút. Do đó là trải nghiệm học tập, JWT không dễ cài đặt ngay từ đầu và sẽ yêu cầu bạn đọc nhiều và bạn sẽ thất bại và bạn sẽ thất vọng nhưng cuối cùng bạn sẽ biết cách thiết lập và cách hoạt động
Tôi cũng đã nghe nói về OpenIddict, Auth0, IdentityServer, vậy sự khác biệt giữa tất cả các cơ chế xác thực này là gì?
Vì vậy, những gì bạn đã làm trong hướng dẫn Stormpath KHÔNG được sản xuất. Đó chỉ là một bản demo nhỏ, để giúp bạn hiểu JWT là gì và nó hoạt động như thế nào. Các đề cập ở trên là thư viện hoàn chỉnh mà giải quyết tất cả các nâng nặng và không yêu cầu bạn phải xây dựng toàn bộ điều từ đầu. Và sự khác biệt chính giữa chúng là phạm vi mà chúng bao trùm.
Cá nhân tôi sử dụng IS4 và nó đã cho tôi khóc không quá 2 lần (Đó là đơn giản hơn tôi nghĩ): http://identityserver4.readthedocs.io/en/release/
https://github.com/openiddict/openiddict-core
https://auth0.com/docs/quickstart/webapp/aspnet-core/00-intro
Nếu Web Api của bạn được truy cập bằng các cuộc gọi AJAX thì JWT có thể là lựa chọn mong muốn, nhưng không bắt buộc. đánh giá bởi mô tả ứng dụng của bạn, có vẻ như với tôi rằng hệ thống xác thực mặc định có thể phục vụ bạn tốt. Auth2 là cơ chế xác thực cho phép đăng nhập bên ngoài như Facebook. Nó là một phần của hệ thống xác thực mặc định và bạn không cần phải làm gì nhiều để sử dụng nó trong ứng dụng của mình.
OpenIddict nằm trên đầu trang của Auth2. Nó là một phần của hệ thống xác thực mặc định và bạn không cần phải làm gì nhiều để sử dụng nó trong ứng dụng của mình. Đây là cơ chế xác thực cho phép đăng nhập bên ngoài như Google+
IdentityServer có thể được sử dụng cho Wep Api lớn được truy cập bằng các cuộc gọi Ajax. Ví dụ, bạn có thể sử dụng IdentityServer để xác thực người dùng mong muốn một ứng dụng Angular front end.
Một lần nữa, hệ thống xác thực mặc định có thể phục vụ bạn tốt.
Hope this helps ...
Sử dụng thẻ (JWT) nếu bạn có nhiều ứng dụng hoặc dịch vụ (web, điện thoại di động, các dịch vụ khác) kết nối với API của bạn. Lợi ích: Không quốc tịch, Khả năng mở rộng, Không có cookie, không có vấn đề về CORS (nếu bạn cho phép).
Nếu API của bạn sẽ chỉ được một ứng dụng web sử dụng hệ thống xác thực mặc định ASP mặc định. Dễ thiết lập hơn.
Nếu bạn WebAPI và giao diện người dùng là được lưu trữ trong cùng một ứng dụng web, bảo mật cơ sở mã thông báo không mua cho bạn bất kỳ thứ gì qua xác thực dựa trên cookie được cung cấp bởi xác thực được tích hợp sẵn. Đó là vì cookie xác thực được gửi trở lại ứng dụng lưu giữ trên mọi yêu cầu HTTP. Khi bạn thực hiện cuộc gọi đến một trang web khác với trang web bạn đã đăng nhập trên các cookie đó, sẽ không được gửi. Vì vậy, Jason Web Tokens (JWT) cung cấp định dạng chuẩn cho trình duyệt để gửi thông tin nhận dạng tới trang web khi cookie không phải là một tùy chọn.
- 1. AuthorizeAttribute with JWT Token- Xác thực trong .NET Core 2.0
- 2. Xác thực JWT với Vue.js
- 3. Xác thực: Sử dụng JWT so với phiên
- 4. Làm thế nào để thêm "ApiController" với xác thực mã thông báo bên trong Asp Net Core RC1 MVC
- 5. Net Lõi 2.0 Web API sử dụng JWT - Thêm danh tính phá vỡ xác thực JWT
- 6. Xác thực JWT trong HAProxy
- 7. . Xác thực JWT lõi Net với khóa API tùy chỉnh Middleware
- 8. Xác thực cookie Asp.Net Core
- 9. Xác thực mã thông báo xác thực trong ASP.NET Core
- 10. SecurityTokenSignatureKeyNotFoundException khi xác thực chữ ký JWT
- 11. Vượt qua xác thực với ASP Core MVC, API Web và IdentityServer4?
- 12. Xác thực WebApi .NET
- 13. Xác thực và ủy quyền ứng dụng với JWT
- 14. Asp.net so sánh trình xác thực để xác thực ngày
- 15. Xác thực tùy chỉnh trong ASP.Net-Core
- 16. Sử dụng cơ sở dữ liệu Identity 2.0 để xác thực ứng dụng ASP.NET Core 1.0
- 17. Xác thực một thuộc tính duy nhất với Thư viện xác thực thông thạo cho .Net
- 18. Làm cách nào để thay đổi tên bảng ASP.NET Identity mặc định trong .NET CORE?
- 19. Sử dụng JWT để xác thực vòng lặp
- 20. Xác thực hai bước OAuth 2.0 so với SSL/TLS
- 21. Xác thực Windows trong .NET
- 22. Xác thực đối với Active Directory trong ứng dụng .NET Core 1.0?
- 23. Làm cách nào để triển khai Xác thực cơ bản với xác thực JWT trong Spring Boot?
- 24. Xác thực hơi nước với Angular
- 25. Xác thực OWIN với xác thực cơ bản IIS
- 26. Mã thông báo JWT để xác thực tên miền chéo
- 27. Xác thực Java và Kerberos krb5.conf so với System.setProperty
- 28. API ServiceStack và Xác thực ASP MVC theo hai cách
- 29. Sự cố xác thực với WWW-Xác thực: Thương lượng
- 30. Làm cách nào để xác thực chỉ một phần của mô hình trong ASP .NET MVC?
Cảm ơn câu trả lời. Vì vậy, nếu tôi quyết định sử dụng xác thực cho một Web Api, mà làm cho các yêu cầu đã được xác thực đến một Api Web khác, giải pháp tốt nhất sẽ giống như một Đăng nhập Một lần? (IdentityServer4, Auth0)? –
@AndrewK Khách hàng chuyển mã thông báo cho api, và api đó xác nhận mã thông báo với Máy chủ xác thực, nếu bạn có nhiều api, bạn chỉ cần trỏ đến cùng một Máy chủ xác thực, theo cách đó, nhiều api/khách hàng có thể sử dụng Đăng nhập một lần, vì mã thông báo được phát hành là từ Máy chủ xác thực duy nhất. Hãy nhớ rằng Máy chủ xác thực không phải là một API. Tôi đã sử dụng Identity Server 4 và nó cho phép bạn tạo một Máy chủ xác thực có thể phát hành và xác thực mã thông báo. Lưu ý: nếu bạn có 1 api gọi khác, bạn đang làm gì đó sai. –
@Anton Tôi nghĩ rằng asp.net identity không sử dụng session, nó chỉ là yêu cầu người dùng được mã hóa và đưa vào một cookie, vì vậy chúng tôi không đạt được hiệu suất, nhưng bằng cách sử dụng token, máy chủ api phải thực hiện cuộc gọi đến máy chủ auth để xác nhận mã thông báo như hiệu suất tôi nghĩ rằng cookie là tốt hơn. – Lerner