Authentication 如何为SPA+;应用程序编程接口?

Authentication 如何为SPA+;应用程序编程接口?,authentication,authorization,single-page-application,openid-connect,standards,Authentication,Authorization,Single Page Application,Openid Connect,Standards,好了,前面的问题很长 我正在开发Angular+.NET Core应用程序,我有点搞不清楚什么是为我的应用程序进行authN&authZ的最佳方式。 在之前的一段时间里,我要做的是在我的前端有一个页面,请求电子邮件和密码,然后通过POST发送到我的后端,在那里我会生成一个JWT令牌。然后,我将这个令牌存储在localStorage中,并将其用于请求 但是,在读了一些文章之后,我注意到人们倾向于用另一种方式来做这件事。据我所知,事情是这样的: 创建传统的身份验证应用程序 当用户想要登录SPA时,将

好了,前面的问题很长

我正在开发Angular+.NET Core应用程序,我有点搞不清楚什么是为我的应用程序进行authN&authZ的最佳方式。 在之前的一段时间里,我要做的是在我的前端有一个页面,请求电子邮件和密码,然后通过POST发送到我的后端,在那里我会生成一个JWT令牌。然后,我将这个令牌存储在
localStorage
中,并将其用于请求

但是,在读了一些文章之后,我注意到人们倾向于用另一种方式来做这件事。据我所知,事情是这样的:

  • 创建传统的身份验证应用程序
  • 当用户想要登录SPA时,将他们重定向到auth应用程序,并在那里登录
  • 登录后,重定向回SPA并将令牌存储在内存中
  • 使用存储的令牌对请求进行身份验证和授权
  • 利润
  • 我也一直在阅读并开始使用Auth0,它似乎在使用后一种方法。我目前使用Auth0的问题是,我需要在本地数据库中有一个
    Users
    表,用于获取其他用户数据(我知道可以添加到Auth0中的元数据,但每次需要使用用户元数据时都必须从Auth0获取数据不是更慢吗?&关系,但是当我的应用程序在localhost上时,钩子就不起作用了

    不管怎样

    TL;DR

    • 是否有一种目前推荐的标准方法
    • 我是否正确理解后一种方法实际上是如何工作的
    • 我这样做是不是很不安全?据我所知,不安全性来自于将JWT令牌存储在localStorage中,但令牌实际上需要生成一个密钥,因此,如果恶意用户可以看到他们的令牌,这有关系吗?没有这个秘密,他们无论如何也不能篡改它

    我将查看这两个资源,我同意将所有令牌处理放在后端而不是SPA客户端的结论