Angular中令牌验证的最佳方法

问题描述 投票:2回答:1

在使用令牌验证进行身份验证的AngularJS的WebApp开发中,执行此验证的最佳方法是什么?例如:

  1. 每次路由转换时验证令牌。为此我每次想要验证时都要休息。
  2. 仅使用一次休息调用验证令牌一次,然后将令牌存储在本地存储中。 (令牌本身只有一个布尔告诉它是否经过身份验证)

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

angularjs rest authentication token
1个回答
1
投票

如果我们研究一下JSON Web Token(JWT)是什么(虽然你没有特别提到JWT,只是简单地称为“令牌”),你会发现,一旦你得到JWT,你不需要每次制作时都要验证它客户端应用程序中的转换(Angular)。这是因为JWT通常是签名的,因此服务器可以确定发件人(在这种情况下是Angular应用程序)是他们在提出请求时所说的人。

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

总结(并回答你的问题)

1.每次路由转换时都要验证令牌。为此,我必须每次要验证时都要休息。

不,这没用,因为给定的令牌已经由服务器签名。如果令牌在客户端以任何方式被操纵,资源服务器将知道它并将使用正确的HTTP状态代码(通常是a 401 HTTP Status)来回答。

您可以做的是,如果服务器使用401进行响应,您可以使用Refresh Token(如果服务器提供它)以获取新的访问令牌并在每次请求时再次使用它。这样,最终用户永远不会知道幕后发生了什么(并且不会再次看到登录表单),因为您不会再次询问他/她的用户名和密码。

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

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

如果我是你,我会读到很多关于这一点,因为还有更多要了解的东西,而不是任何一个回答者可以在一个答案中放在一起的SO(我把一些链接到我使用过的来源,并且描述得非常好这些主题)。

请记住,所有这些行为都可以根据您的需要进行修改,而不是所有这些行为都必须按照我刚才描述的方式进行修改。我只是举了几个例子。

下面的图片将为您提供有关我刚才描述的所有这些问题的大图。

Authentication Secuence

© www.soinside.com 2019 - 2024. All rights reserved.