Angular 中令牌验证的最佳方法

2024-03-23

在使用 AngularJS 进行的 Web 应用程序开发中,使用令牌验证来进行身份验证,那么进行此验证的最佳方法是什么?例如:

  1. 每次进行路由转换时都验证令牌。为此,每次我想验证时,我都必须拨打休息电话。
  2. 通过一次休息调用仅验证令牌一次,然后将令牌存储在本地存储中。 (令牌本身只有一个布尔值,告诉它是否已通过身份验证)

我担心的是不要在每个路由事务中进行休息调用,我不想消耗那么多的 http 流量。但是,如果没有其他办法,我会这样做。


如果我们研究一下什么是JSON 网络令牌 https://jwt.io/introduction/(JWT) 是(虽然您不是专门指 JWT,而只是指“令牌”),您会意识到,一旦获得 JWT,您不需要每次在客户端应用程序中进行转换时都验证它(有角)。这是因为 JWT 通常是经过签名的,因此服务器可以确保发送者(在本例中为 Angular 应用程序)就是他们在发出请求时所说的身份。

您需要做的就是每次尝试使用资源时,将标头中每个请求的 JWT 发送到 API 服务器。服务器负责检查您发送的 JWT 是否有效,并为该请求分配适当的权限,以便访问资源。

结论 (并回答您的问题)

1.每次路由转换时验证令牌。为此我 每次我想验证时都必须拨打休息电话。

不,这是没有用的,因为给定的令牌已经由服务器签名。如果客户端以任何方式操作令牌,资源服务器都会知道它,并会用正确的 HTTP 状态代码进行应答(通常401 HTTP 状态 https://httpstatuses.com/401).

你可以做的是,如果服务器响应401,你可以使用刷新令牌 https://auth0.com/learn/refresh-tokens/(如果服务器提供)以便获取新的访问令牌并在每个请求中再次使用它。这样,最终用户将永远不会知道幕后发生了什么(并且不会再次看到登录表单),因为您不会再次询问他/她有关用户名和密码的信息。

2.仅验证令牌一次,并进行一次休息调用,然后将令牌存储在本地存储中。 (令牌本身只有一个布尔值 告诉它是否经过验证)

这是一个正确的方法(并且被大多数人使用),这样您就不会因不必要的请求而导致流量过载。实际上,当您获得访问令牌时,您不需要验证它,因为正如我之前所说,令牌本身是独立的(它包含有关用户的所有必需信息以及令牌提供商认为重要的其他必要数据)。

如果我是你,我会阅读很多有关此内容的内容,因为要了解的内容比任何回答者可以在此处的单个答案中汇总的内容要多得多(我放置了一些我使用过的来源的链接,这些链接很好地描述了这些主题)。

请记住,所有这些行为都可以根据您的需要进行修改,并非所有行为都必须是我刚才描述的方式。我只是举了一些例子来说明它是如何发生的。

下图将向您展示我刚才描述的所有这些问题的大局。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Angular 中令牌验证的最佳方法 的相关文章

随机推荐