ASP .NET Core Identity 默认身份验证与 JWT 身份验证
ASP .NET Core Identity default authentication vs JWT authentication
我正在开发 ASP NET Core Web API,我对选择身份验证方法感到困惑。以前都是申请default Asp Net Identity认证,最近才知道JWT。因此,我几乎按照本文中的方式实现了身份验证:https://stormpath.com/blog/token-authentication-asp-net-core。
但是我无法理解这个JWT的好处。使用简单的 Asp 网络身份验证,我不关心令牌存储等。我只需要使用 signInManager 登录并使用授权方法直到注销。使用 JWT,我需要考虑令牌存储、过期和其他困难。那么,这个 JWT 有什么好处呢?登录后如何存储此 JWT 令牌?此外,我是否应该使用这个 JWT?在我的例子中,我需要简单的 WebApi 的简单身份验证,它将被一个或更多用户使用。我还听说过 OpenIddict、Auth0、IdentityServer,那么所有这些身份验证机制之间有什么区别?
如果您的 Web Api 将通过 AJAX 调用访问,那么 JWT 可能是一个理想的选择,但不是强制性的。从你的应用程序的描述来看,在我看来,默认的身份验证系统可以很好地为你服务。
Auth2 是启用 Facebook 等外部登录的身份验证机制。它是默认身份验证系统的一部分,您无需做太多事情就可以在您的应用程序中使用它。
OpenIddict 位于 Auth2 之上。它是默认身份验证系统的一部分,您无需做太多事情就可以在您的应用程序中使用它。 Google+
等外部登录的认证机制
IdentityServer 可用于通过 Ajax 调用访问的大型 Wep Api。例如,您可以使用 IdentityServer 对渴望使用前端 Angular 应用程序的用户进行身份验证。
再一次,默认的身份验证系统可以很好地为您服务。
希望这对您有所帮助...
如果您有多个应用程序或服务(网络、移动、其他服务)连接到您的 API,请使用令牌 (JWT)。优点:无状态、可扩展性、无 cookie、无 CORS 问题(如果您允许的话)。
如果您的 API 将仅由一个 Web 应用程序使用,请使用默认的 ASP 默认身份验证系统。它更容易设置。
这是我的理解方式,分为 3 个逻辑部分。
- 身份验证服务器 - 这将验证并颁发 JWT 令牌,当 API 需要验证令牌时,它会将令牌发送到此服务器以对其进行验证。
- 客户端 - 这是为您的网页或应用程序提供服务的服务。这就是请求和存储 JWT 令牌所需的内容。客户端每次请求数据时都需要将令牌传递给 api。
- API - 这是提供信息并需要使用身份验证服务器验证令牌的内容。
So, what're the benefits of this JWT?
JWT发给客户端,存储在客户端。让 JWT 允许多个客户端(应用程序或网站)使用相同的身份验证服务器,该服务器分发 JWT 并说明客户端可以使用哪些 API 以及如何使用。
How can I store this JWT token after login?
我只尝试将它存储在 Ionic 2 应用程序中,该应用程序使用具有存储模块的 angular 2。但我很确定很多人已经这样做并提出了这个问题:
Simple JWT authentication in ASP.NET Core 1.0 Web API
更新
如果你的前端纯粹是 html/js/css 并且没有后端来容纳它,你可以将你的令牌存储在本地存储中,有多个 npm 包可以帮助你完成这个 like this one。您想寻找隐式流。
否则,如果您的前端确实有一个后端,您希望将令牌存储在您选择的 session/database 中,有第 3 方提供商可以做到这一点,例如 IdentityServer4。您想使用混合流
Furthermore, should I even use this JWT? In my case, I need simple
authentication for simple WebApi which will be used by one or little
bit more users.
整个关注点分离的原因是性能,所以你并不真正需要它,因为它只是一个或更多的用户。 这样做是因为这是一种学习经历,JWT 从一开始就不容易设置,需要你做大量的阅读,你会失败,你会感到沮丧,但最后你会知道如何设置和工作原理
I've also heard about OpenIddict, Auth0, IdentityServer, so what's the difference between all of these authentication mechanisms?
因此,您在 Stormpath 教程中所做的尚未准备好投入生产。这只是一个小演示,旨在帮助您了解 JWT 是什么以及它是如何工作的。上面提到的是完整的库,可以解决所有繁重的工作,不需要您从头开始构建整个东西。它们之间的主要区别在于它们涵盖的范围。
我个人用过IS4,哭了不超过2次(比我想象的简单):
http://identityserver4.readthedocs.io/en/release/
https://github.com/openiddict/openiddict-core
https://auth0.com/docs/quickstart/webapp/aspnet-core/00-intro
如果您的 webapi 和用户界面托管在同一个 Web 应用程序中,基于令牌的安全性不会比内置身份验证提供的基于 cookie 的身份验证给您带来任何好处。这是因为在每次 HTTP 请求时,身份验证 cookie 都会被发送回 keep 应用程序。当您拨打与您登录的网站不同的网站时,这些 cookie 不会被发送。因此 JSON Web 令牌 (JWT) 为浏览器提供了一种标准格式,可在无法选择 cookie 时向网站发送身份信息。
我正在开发 ASP NET Core Web API,我对选择身份验证方法感到困惑。以前都是申请default Asp Net Identity认证,最近才知道JWT。因此,我几乎按照本文中的方式实现了身份验证:https://stormpath.com/blog/token-authentication-asp-net-core。 但是我无法理解这个JWT的好处。使用简单的 Asp 网络身份验证,我不关心令牌存储等。我只需要使用 signInManager 登录并使用授权方法直到注销。使用 JWT,我需要考虑令牌存储、过期和其他困难。那么,这个 JWT 有什么好处呢?登录后如何存储此 JWT 令牌?此外,我是否应该使用这个 JWT?在我的例子中,我需要简单的 WebApi 的简单身份验证,它将被一个或更多用户使用。我还听说过 OpenIddict、Auth0、IdentityServer,那么所有这些身份验证机制之间有什么区别?
如果您的 Web Api 将通过 AJAX 调用访问,那么 JWT 可能是一个理想的选择,但不是强制性的。从你的应用程序的描述来看,在我看来,默认的身份验证系统可以很好地为你服务。 Auth2 是启用 Facebook 等外部登录的身份验证机制。它是默认身份验证系统的一部分,您无需做太多事情就可以在您的应用程序中使用它。
OpenIddict 位于 Auth2 之上。它是默认身份验证系统的一部分,您无需做太多事情就可以在您的应用程序中使用它。 Google+
等外部登录的认证机制IdentityServer 可用于通过 Ajax 调用访问的大型 Wep Api。例如,您可以使用 IdentityServer 对渴望使用前端 Angular 应用程序的用户进行身份验证。
再一次,默认的身份验证系统可以很好地为您服务。
希望这对您有所帮助...
如果您有多个应用程序或服务(网络、移动、其他服务)连接到您的 API,请使用令牌 (JWT)。优点:无状态、可扩展性、无 cookie、无 CORS 问题(如果您允许的话)。
如果您的 API 将仅由一个 Web 应用程序使用,请使用默认的 ASP 默认身份验证系统。它更容易设置。
这是我的理解方式,分为 3 个逻辑部分。
- 身份验证服务器 - 这将验证并颁发 JWT 令牌,当 API 需要验证令牌时,它会将令牌发送到此服务器以对其进行验证。
- 客户端 - 这是为您的网页或应用程序提供服务的服务。这就是请求和存储 JWT 令牌所需的内容。客户端每次请求数据时都需要将令牌传递给 api。
- API - 这是提供信息并需要使用身份验证服务器验证令牌的内容。
So, what're the benefits of this JWT?
JWT发给客户端,存储在客户端。让 JWT 允许多个客户端(应用程序或网站)使用相同的身份验证服务器,该服务器分发 JWT 并说明客户端可以使用哪些 API 以及如何使用。
How can I store this JWT token after login?
我只尝试将它存储在 Ionic 2 应用程序中,该应用程序使用具有存储模块的 angular 2。但我很确定很多人已经这样做并提出了这个问题:
Simple JWT authentication in ASP.NET Core 1.0 Web API
更新 如果你的前端纯粹是 html/js/css 并且没有后端来容纳它,你可以将你的令牌存储在本地存储中,有多个 npm 包可以帮助你完成这个 like this one。您想寻找隐式流。
否则,如果您的前端确实有一个后端,您希望将令牌存储在您选择的 session/database 中,有第 3 方提供商可以做到这一点,例如 IdentityServer4。您想使用混合流
Furthermore, should I even use this JWT? In my case, I need simple authentication for simple WebApi which will be used by one or little bit more users.
整个关注点分离的原因是性能,所以你并不真正需要它,因为它只是一个或更多的用户。 这样做是因为这是一种学习经历,JWT 从一开始就不容易设置,需要你做大量的阅读,你会失败,你会感到沮丧,但最后你会知道如何设置和工作原理
I've also heard about OpenIddict, Auth0, IdentityServer, so what's the difference between all of these authentication mechanisms?
因此,您在 Stormpath 教程中所做的尚未准备好投入生产。这只是一个小演示,旨在帮助您了解 JWT 是什么以及它是如何工作的。上面提到的是完整的库,可以解决所有繁重的工作,不需要您从头开始构建整个东西。它们之间的主要区别在于它们涵盖的范围。
我个人用过IS4,哭了不超过2次(比我想象的简单): http://identityserver4.readthedocs.io/en/release/
https://github.com/openiddict/openiddict-core
https://auth0.com/docs/quickstart/webapp/aspnet-core/00-intro
如果您的 webapi 和用户界面托管在同一个 Web 应用程序中,基于令牌的安全性不会比内置身份验证提供的基于 cookie 的身份验证给您带来任何好处。这是因为在每次 HTTP 请求时,身份验证 cookie 都会被发送回 keep 应用程序。当您拨打与您登录的网站不同的网站时,这些 cookie 不会被发送。因此 JSON Web 令牌 (JWT) 为浏览器提供了一种标准格式,可在无法选择 cookie 时向网站发送身份信息。