Authentication 使用IdentityServer与创建基于JWT的自定义身份验证

Authentication 使用IdentityServer与创建基于JWT的自定义身份验证,authentication,asp.net-core,asp.net-identity,Authentication,Asp.net Core,Asp.net Identity,身份验证对我来说有点过头了 我的理解是: 客户端执行登录 API或身份验证服务器使用令牌进行响应 客户端调用API(包括保存令牌的头) API检查令牌是否有效,以及有效令牌是否响应资源 我选择了几个选项: 标识服务器4 具有易于实现第三方身份验证(如Facebook)的优势。您可以轻松地使用ASP.NET核心标识基于角色对API进行授权 自定义(简单)JWT身份验证 参考: 使用这种方法,您必须创建自己的身份用户并从数据库中获取它 Cookie身份验证 客户端在发送请求时将令牌保存在cookie

身份验证对我来说有点过头了

我的理解是:

  • 客户端执行登录
  • API或身份验证服务器使用令牌进行响应
  • 客户端调用API(包括保存令牌的头)
  • API检查令牌是否有效,以及有效令牌是否响应资源
  • 我选择了几个选项:

    标识服务器4 具有易于实现第三方身份验证(如Facebook)的优势。您可以轻松地使用ASP.NET核心标识基于角色对API进行授权

    自定义(简单)JWT身份验证 参考:

    使用这种方法,您必须创建自己的身份用户并从数据库中获取它

    Cookie身份验证 客户端在发送请求时将令牌保存在cookie中,您也必须发送它


    我的前端是用JS编写的,后端是ASP.NET内核,所以是CORS

    我不知道我应该用什么,为什么为什么许多人建议使用IdentityServer 4;简单的自定义身份验证还不够吗?


    (我对IdentityUser属性和“隐藏”数据库检查有问题)

    身份验证的问题是,编写几行代码来完成用户身份验证的最终目标可能很简单,但以一种你不会后悔的方式来完成这项工作确实很复杂;我的申请被拥有了

    防止这种情况发生的一个步骤是,不要试图重新发明轮子,坚持使用当前的标准。然而,即使使用标准,您也需要相应地实施它们,这就是为什么您可能会看到您提到的建议。实际上,我自己也会做同样类型的推荐,尽可能多地委托给第三方库或云服务。(你应该知道我在AUT0工作,所以你可以认为我有偏见,但是,对于一个非偏见的建议,你可以检查)。 此外,如果您将令牌存储在cookie中,尽管令牌的存储和传输方式不同,但这仍然是一个基于令牌的身份验证系统;有关选择客户端令牌存储方法可能带来的影响的更多信息,请查看

    关于CORS,您没有明确说明,因此我认为值得一提。如果将前端和后端部署在不同的域中,那么实际上只需要担心CORS,因为即使开发是孤立进行的,如果它们共享一个域,那么CORS也不需要担心

    结论 对于使用RESTAPI的前端基于浏览器的应用程序,最常见的方法是使用基于令牌的身份验证,该身份验证依赖于OAuth 2.0协议来执行令牌的实际颁发。此外,您应该将令牌发行委托给第三方(IdentityServer4或其他),这样您就不需要实现或维护系统的该部分,只需要使用/验证生成的令牌