在使用令牌验证进行身份验证的AngularJS的WebApp开发中,执行此验证的最佳方法是什么?例如:
我担心的是不在每个路由事务中进行休息调用,我不想消耗那么多的http流量。但是,如果没有其他办法,我会这样做。
答案 0 :(得分:1)
如果我们研究一下JSON Web Token(JWT)是什么(虽然你没有特别提到JWT,而只是指“令牌”),你会发现一旦你得到一个JWT,你就不需要每次在客户端应用程序(Angular)中进行转换时验证它。这是因为JWT通常是签名的,因此服务器可以确定发件人(在这种情况下是Angular应用程序)是他们在提出请求时所说的人。
您需要做的是每次尝试使用资源时,将标头中的每个请求的JWT发送到API服务器。服务器负责检查您是否正在发送有效的JWT,并为该请求分配适当的权限,以便访问资源。
结束(并回答您的问题)
1.每次路由转换时都要验证令牌。为此我 每次我想验证时都必须打个电话。
不,这没用,因为给定的令牌已经由服务器签名。如果在客户端以任何方式操纵令牌,资源服务器将知道它并将使用正确的HTTP状态代码(通常为a 401 HTTP Status)进行应答。
如果服务器以401
回复,您可以使用Refresh Token(如果服务器提供)以获取新的访问令牌并再次使用它在每个请求。这样,最终用户永远不会知道幕后发生了什么(并且不会再看到登录表单),因为你不会再问他/她有关用户名和密码的信息。
2.仅使用一次休息呼叫验证令牌一次,然后将令牌存储在本地存储中。 (令牌本身只有一个布尔值 告诉它是否经过身份验证)
这是一种正确的方法(并且被大多数人使用),这样您就不会因不必要的请求而超载流量。实际上,当你获得访问令牌时,你不需要验证它,因为正如我之前所说,令牌本身是自包含(它包含有关用户和其他必要数据的所有必需信息)令牌提供者认为很重要。)
如果我是你,我会读到很多关于这一点,因为还有更多要了解的东西,而不是任何一个回答者可以在一个单独的答案中放在一起的SO(我把一些链接放到了我用过的来源和哪个很好地描述了这些主题。)
请记住,所有这些行为都可以根据您的需要进行修改,而不是所有这些都必须按照我刚才描述的方式进行修改。我只是举了几个例子。
下面的图片将为您提供我刚刚描述的所有这些问题的大图。