如何对 SPA + API 进行身份验证?

时间:2021-05-07 16:50:57

标签: authentication authorization single-page-application openid-connect standards

好的,这么长的问题。

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

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

  1. 创建一个传统的身份验证应用
  2. 当用户想要登录 SPA 时,将他们重定向到他们登录的身份验证应用
  3. 登录后,重定向回 SPA 并将令牌存储在内存中
  4. 使用存储的令牌对请求进行身份验证和授权
  5. 利润

我也一直在阅读并开始使用 Auth0,它似乎在使用后一种方法。我目前对 Auth0 的问题是,我需要在本地数据库中有一个 Users 表,用于获取其他用户数据(我知道可以在 Auth0 中添加的元数据,但不是吗?每次我需要使用用户元数据时都必须从 Auth0 获取数据的速度较慢?) & 关系,但是当我的应用程序在本地主机上时,Hooks 不起作用。

无论如何,

TL;DR

  • 是否有一种标准的方法来执行此操作,目前建议每个人都这样做
  • 我是否正确理解后一种方法的实际工作原理
  • 我进行身份验证的方式是否不安全?据我了解,不安全来自于将 JWT Token 存储在 localStorage 中,但该令牌实际上需要一个密钥才能生成,那么恶意用户是否可以看到他们的令牌是否重要?无论如何,如果没有秘密,他们无法篡改它

1 个答案:

答案 0 :(得分:0)

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