【问题标题】:Best Way For Token Validation in AngularAngular中令牌验证的最佳方式
【发布时间】:2018-08-05 22:57:28
【问题描述】:

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

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

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

【问题讨论】:

  • 您可以将身份验证令牌存储在本地存储中一次,并且每次调用 rest api 时,您都可以在请求标头中添加令牌以验证每个 api 中的用户。我认为这将是最好和最简单的角度令牌验证的方式

标签: angularjs rest authentication token


【解决方案1】:

如果我们研究一下 JSON Web Token (JWT) 是什么(尽管您不是专门指 JWT,而只是指“令牌”),您会发现一旦获得 JWT,您就不需要验证每次您在客户端应用程序(Angular)中进行转换时。这是因为 JWT 通常是经过签名的,因此服务器可以确定发件人(在本例中为 Angular 应用程序)是他们在发出请求时所说的身份。

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

结论并回答您的问题

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

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

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

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

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

如果我是你,我会阅读很多关于此的内容,因为除了任何回答者可以在 SO 上的单个答案中汇总的内容之外,还有更多要了解的内容(我放了一些指向我使用过的来源的链接,其中很好地描述了这些主题)。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-22
    • 1970-01-01
    • 1970-01-01
    • 2017-12-10
    • 2017-07-05
    • 1970-01-01
    • 2015-04-26
    相关资源
    最近更新 更多