7

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

5

Đây là cách tôi hiểu điều này, chia thành 3 phần hợp lý.

  1. 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.
  2. 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.
  3. 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

+0

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)? –

+0

@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. –

+0

@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

3

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 ...

4

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.

3

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.

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