我正在开发ASP NET Core Web API,我对选择身份验证方法感到困惑。我曾经应用默认的Asp Net Identity身份验证,但最近我知道了JWT。因此,我几乎按照本文中所做的方式实现了身份验证:https://stormpath.com/blog/token-authentication-asp-net-core。 但我无法理解这个 JWT 的好处。使用简单的Asp Net身份验证,我不关心令牌存储等。我只需要使用登录管理器登录并使用授权方法,直到注销。对于 JWT,我需要考虑令牌存储、过期和其他困难。那么,这个 JWT 有什么好处呢?登录后如何存储此 JWT 令牌?此外,我甚至应该使用此 JWT 吗?就我而言,我需要对简单的WebApi进行简单的身份验证,该WebApi将被一个或多个用户使用。我也听说过OpenIddict,Auth0,IdentityServer,那么所有这些身份验证机制之间有什么区别?
这是我的理解方式,分为 3 个逻辑部分。
- 身份验证服务器 - 这将对 JWT 令牌进行身份验证和颁发,当 API 需要验证令牌时,它会将令牌发送到此服务器进行验证。
- 客户端 - 这是为您的网页或您的应用程序提供服务的内容。这是请求和存储 JWT 令牌所需的内容。客户端每次请求数据时都需要将令牌传递给 api。
- API - 这是提供信息的内容,需要通过身份验证服务器验证令牌。
那么,这个 JWT 有什么好处呢?
JWT 颁发给客户端并存储在客户端。拥有 JWT 允许多个客户端(应用程序或网站)使用相同的身份验证服务器,该服务器分发 JWT 并说明客户端可以使用哪些 API 以及如何使用。
登录后如何存储此 JWT 令牌?
我只尝试将其存储在使用具有存储模块的角度 2 的 Ionic 2 应用程序中。但我很确定很多人已经这样做了,并问了这个问题:
Core 1.0 Web API ASP.NET 简单 JWT 身份验证
核心 ASP.NET 中基于令牌的身份验证(已更新)
更新如果你的前端是纯html/js/css,并且没有后端来容纳它,你会将你的令牌存储在本地存储中,有多个npm包可以帮助你解决这个问题,就像这个一样。你想要查找隐式流。
否则,如果您确实有一个前端附带的后端,您希望将令牌存储在您选择的会话/数据库中,则有第三方提供商可以执行此操作,例如 IdentityServer4。您想使用混合流
此外,我甚至应该使用此 JWT 吗?就我而言,我需要简单的 简单 WebAPI 的身份验证,将由一个人或少数人使用 多一点用户。
完全分离关注点的原因是性能,因此您并不真正需要它,因为它只是一个或多个用户。这样做是因为这是一种学习体验,JWT 从一开始就不容易设置,需要您进行大量阅读,您会失败,您会感到沮丧,但最后您会知道如何设置它以及它是如何工作的
我也听说过OpenIddict,Auth0,IdentityServer,那么所有这些身份验证机制之间有什么区别?
因此,您在风暴路径教程中所做的操作尚未准备好生产。这只是一个小演示,以帮助您了解 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
如果您有多个应用程序或服务(Web、移动、其他服务)连接到您的 API,请使用令牌 (JWT)。优点:无状态、可扩展性、无 cookie、无 CORS 问题(如果您允许)。
如果 API 仅由一个 Web 应用程序使用,请使用默认的 ASP 默认身份验证系统。它更容易设置。
如果您的 webapi 和用户界面托管在同一 Web 应用程序中,则基于令牌的安全性不会通过内置身份验证提供的基于 cookie 的身份验证为您提供任何东西。这是因为身份验证 cookie 会在每个 HTTP 请求时发送回 keep 应用程序。当您调用您在这些 Cookie 上登录的网站以外的网站时,不会发送。因此,JSON Web 令牌 (JWT) 为浏览器提供了一种标准格式,以便在无法使用 cookie 时将身份信息发送到网站。
如果要通过 AJAX 调用访问您的 Web Api,那么 JWT 可能是理想的选择,但不是强制性的。 从您的应用程序描述来看,在我看来,默认身份验证系统可以很好地为您服务。 Auth2 是启用外部登录(如 Facebook)的身份验证机制。它是默认身份验证系统的一部分,您无需执行太多操作即可在应用中使用它。
OpenIddict 位于 Auth2 之上。它是默认身份验证系统的一部分,您无需执行太多操作即可在应用中使用它。它是启用外部登录(例如Google+)的身份验证机制
IdentityServer 可用于通过 Ajax 调用访问的大型 Wep API。例如,您可以使用IdentityServer对渴望前端Angular应用程序的用户进行身份验证。
再一次,默认身份验证系统可以很好地为您服务。
希望这有帮助...