【问题标题】:Permanent token on loopback环回上的永久令牌
【发布时间】:2016-09-21 16:46:17
【问题描述】:

我正在使用 Loopback API 构建一个应用程序,该应用程序将由 iPhone 应用程序使用。有一个与 MySQL 数据库的连接,我在其中运行一些查询以获取一些结果并在 API 上公开。

  1. 端点包含一个 ACL,它只允许经过身份验证的用户执行任何操作,包括 GET 操作。所以基本上需要使用 ?access_token 查询字符串来完成请求。
  2. 我想设置一个可以保存在 MySQL 数据库中并且可以在 API 上“永远”使用的令牌。

我不确定我问的问题是否正确,但如果这不是解决此问题的方法,那会是什么?

我的主要观点是我需要使用令牌对请求进行身份验证,但我不想在设置后丢失此令牌。

感谢任何帮助。谢谢!

【问题讨论】:

标签: node.js loopbackjs strongloop


【解决方案1】:

默认情况下,最大令牌 ttl 为 1 年。幸运的是 Loopback 有一个选项可以让你创建一个永久的访问令牌:

allowEternalTokens Boolean 允许访问令牌永不过期。

https://loopback.io/doc/en/lb3/Model-definition-JSON-file.html#advanced-options

如果您使用的是默认用户模型,您可以在 server/model-config.json 中启用它:

"User": {
  "dataSource": "db",
  "options": {
    "validateUpsert": true,
    "allowEternalTokens": true
  }
},

然后在登录时,将ttl设置为-1

请注意,每次您登录 (User.login) 时,您的令牌都会被替换为新令牌。因此,如果您想重复使用相同的访问令牌,只需登录一次。您可以从 AccessToken 模型(或直接从数据库中)获取现有的访问令牌。

如果您有自定义用户模型,可以直接在模型定义文件中设置allowEternalTokens。此外,如果您有自定义用户模型,您还需要更新 AccessToken 模型的relations(如果有的话,可以是内置的,也可以是您的自定义模型)以指向自定义用户模型。

有关自定义用户/访问令牌模型的更多信息:http://loopback.io/doc/en/lb3/Authentication-authorization-and-permissions.html#preparing-access-control-models

【讨论】:

    【解决方案2】:

    您可以在您的 iOS 应用发送的凭证 json 中传递 ttl,在本例中,令牌将存活 60 秒,只需使用较高的值使令牌“永久”:

    POST /Users/login  
    {
    "email":"user@email.com",
    "password":"12345689",
    "ttl": 60000
    }
    

    或者创建一个之前的远程方法来更改ttl 属性,查看这篇文章:

    LINK

    【讨论】:

    • 感谢伊斯梅尔!我使用了这个解决方案。您可以设置的最大值为 1 年。非常感谢!
    【解决方案3】:

    我将 TTL 设置为最长 1 年,但我将 created 字段设置为将来很远的某个时间,例如 2112-10-29 00:00:00-04。这使得令牌在一个世纪后过期。

    【讨论】:

      猜你喜欢
      • 2019-05-11
      • 2013-01-11
      • 2018-01-31
      • 2013-01-20
      • 1970-01-01
      • 2011-09-11
      • 1970-01-01
      • 2021-10-24
      • 2013-06-16
      相关资源
      最近更新 更多