代码之家  ›  专栏  ›  技术社区  ›  brazuka

Angular中令牌验证的最佳方式

  •  4
  • brazuka  · 技术社区  · 7 年前

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

    1. 每次进行路由转换时验证令牌。为此,每次我想验证时,都必须进行rest调用。
    2. 仅使用一次rest调用验证令牌一次,然后将令牌存储在本地存储器中。(标记本身只有一个布尔值,告诉您它是否经过身份验证)

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

    1 回复  |  直到 7 年前
        1
  •  2
  •   lealceldeiro VonC    5 年前

    如果我们调查一下 JSON Web Token (JWT)是(虽然你不是特别指JWT,但只是指“令牌”),你会意识到,一旦你得到了一个JWT,你不需要每次在客户端应用程序中进行转换时都验证它(Angular)。这是因为JWT通常是经过签名的,所以服务器可以确保发件人(在本例中是Angular应用程序)在发出请求时是他们所说的那个人。

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

    总结 ( 回答你的问题 )

    1、每次进行路由转换时验证令牌。为此,我 每次我想验证时都必须进行rest调用。

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

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

    2、仅使用一次rest调用验证令牌一次,然后将令牌存储在本地存储器中。(标记本身只有一个布尔值 告诉它是否经过身份验证)

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

    如果我是你的话,我会读很多关于这方面的书,因为要知道的远比任何回答者在一个答案中能得到的要多,所以(我放了一些链接到我使用过的资料,这些资料很好地描述了这些主题)。

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

    下面的图片将给你一个关于我刚才描述的所有这些事情的大图。

    Authentication Secuence