ASP .NET Core Identity默认身份验证与JWT身份验证

时间:2017-04-15 23:15:15

标签: authentication asp.net-core asp.net-identity jwt asp.net-core-webapi

我正在开发ASP NET Core Web API,我对选择身份验证方法感到困惑。我曾经应用默认的Asp Net Identity身份验证,但最近我知道JWT。所以我几乎像在本文中所做的那样实现了身份验证:https://stormpath.com/blog/token-authentication-asp-net-core。 但我无法理解这个JWT的好处。使用简单的Asp Net身份验证,我不关心令牌存储等。我只需要使用signInManager登录并使用授权方法直到注销。使用JWT,我需要考虑令牌存储,到期和其他困难。那么,这个JWT的好处是什么?如何在登录后存储此JWT令牌?此外,我应该使用这个JWT吗?就我而言,我需要对简单的WebApi进行简单的身份验证,这将由一个或多一点的用户使用。我也听说过OpenIddict,Auth0,IdentityServer,那么所有这些认证机制之间的区别是什么?

4 个答案:

答案 0 :(得分:11)

这是我理解这一点的方式,分为3个逻辑部分。

  1. 身份验证服务器 - 这将验证并发出JWT令牌,当API需要验证令牌时,它会将令牌发送到此服务器以验证它。
  2. 客户端 - 这可以为您的网页提供服务,也可以为您提供应用程序。这是需要请求和存储JWT令牌的内容。每次请求数据时,客户端都需要将令牌传递给api。
  3. API - 提供验证服务器验证令牌的信息和需求。
  4.   

    那么,这个JWT的好处是什么呢?

    JWT发给客户端并存储在客户端。让JWT允许多个客户端(应用程序或网站)使用相同的身份验证服务器,该服务器分发JWT并说明客户端可以使用哪些API以及如何使用。

      

    如何在登录后存储此JWT令牌?

    我只是尝试将它存储在Ionic 2应用程序中,该应用程序使用带有存储模块的角度2。但我很确定很多人已经这样做了并提出了这个问题:

    Simple JWT authentication in ASP.NET Core 1.0 Web API

    Token Based Authentication in ASP.NET Core (refreshed)

    <强>更新 如果您的前端纯粹是html / js / css并且没有后端来容纳它,那么您可以将令牌存储在本地存储中,有多个npm包可以帮助您使用like this one。你想寻找隐含流。

    否则,如果您的前端附带了后端,您希望将令牌存储在您选择的会话/数据库中,则有第三方提供商可以像IdentityServer4那样执行此操作。您想使用混合流程

      

    此外,我应该使用这个JWT吗?就我而言,我需要简单   简单WebApi的身份验证,将由一个或几个人使用   更多用户。

    关注点完全分离的原因是性能,因此您并不需要它,因为它只是一个或多个用户。 这样做是因为它具有学习经验,JWT从一开始就不容易设置并且需要你做很多阅读而你会失败并且你会感到沮丧但最后你会知道如何设置它以及如何工作

      

    我也听说过OpenIddict,Auth0,IdentityServer,那么所有这些认证机制之间的区别是什么?

    所以你在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

答案 1 :(得分:5)

如果您的API有多个应用程序或服务(Web,移动,其他服务)连接,请使用令牌(JWT)。优点:无状态,可伸缩性,无cookie,无CORS问题(如果允许)。

如果您的API仅由一个Web应用程序使用,请使用默认的ASP默认身份验证系统。它更容易设置。

答案 2 :(得分:3)

如果要通过AJAX调用访问您的Web Api,那么JWT可能是理想的选择,但不是强制性的。根据您的应用程序的描述判断,在我看来,默认的身份验证系统可以很好地为您服务。 Auth2是支持Facebook等外部登录的身份验证机制。它是默认身份验证系统的一部分,您无需为了在应用程序中使用它而做很多事情。

OpenIddict位于Auth2之上。它是默认身份验证系统的一部分,您无需为了在应用程序中使用它而做很多事情。它是一种启用外部登录的身份验证机制,例如Google +

IdentityServer可用于Ajax调用访问的大型Wep Api。例如,您可以使用IdentityServer来验证渴望前端Angular应用程序的用户。

再一次,默认的身份验证系统可以很好地为您服务。

希望这会有所帮助......

答案 3 :(得分:3)

如果您的webapi和用户界面托管在同一个Web应用程序中,则令牌库安全性不会为您提供内置身份验证提供的基于cookie的身份验证。这是因为身份验证cookie会在每个HTTP请求上发送回keep应用程序。当您打电话给您登录的网站以外的网站时,这些网址不会被发送。因此,当cookie不是一个选项时,JSON Web令牌(JWT)为浏览器提供标准格式,以便向网站发送身份信息。