【问题标题】:How to safely use json web tokens from external application that talks to wordpress rest api如何安全地使用来自与 wordpress rest api 对话的外部应用程序的 json web 令牌
【发布时间】:2018-08-12 13:09:40
【问题描述】:

我有一个与 JWT 相关的问题。 这是场景。

  • A -> 启用了 wp rest api 的 wordpress 网站;
  • B -> 外部应用程序(比如简单的 javascript/jQuery 应用程序)

因此,如果我想在 wordpress 网站 (A) 上进行发布请求/创建新帖子,我可以通过提供用户名 + 密码然后获取 JWT 令牌进行身份验证来做到这一点。如果我设置了快速登录功能,它基本上可以正常工作,而不会暴露用户名和密码。 但是,问题如下: 如果我需要应用程序让我们说从 A 获取所有帖子(通过 rest api 的 wordpress 网站),但我不想要登录功能,基本上我需要一种方法来提供用户登录凭据以获取 jwt 令牌,但是这对我来说没有意义,因为有人可以检查 js 代码并提取该信息?

【问题讨论】:

  • 要不要做一个不受保护的api路由? (未登录用户可访问)
  • 不,抱歉,如果我的问题不清楚。我想知道如何保护我在用于从 api 获取令牌的外部应用程序的 javascript 文件中提供的用户名和密码。基本上,如果我将用户名和密码放在 javascript 文件中,是否有人能够检查我的应用程序并收集用户名和密码,从而能够获取访问令牌并执行恶意活动?

标签: javascript json ajax wordpress jwt


【解决方案1】:

生成jwt的代码是这样的。如您所见,电子邮件和姓名是 javascript 文件中的一次性变量。用户名和电子邮件本身没有嵌入到代码中。

userSchema.methods.generateJwt = function() {
  var expiry = new Date();
  expiry.setDate(expiry.getDate() + 7);

  return jwt.sign(
    {
      _id: this._id,
      email: this.email,
      name: this.name,
      exp: parseInt(expiry.getTime() / 1000)
    },
    jwt_secret
  );
};

您可能会意外暴露的唯一内容是 jwt_secret。为此,您应该将机密存储在 dotenv 文件中,而不是将其提交给版本控制。

require("dotenv").config();
const jwt_secret = process.env.JWT_SECRET;

【讨论】:

    猜你喜欢
    • 2020-02-17
    • 2016-06-09
    • 2013-02-25
    • 2019-12-12
    • 1970-01-01
    • 1970-01-01
    • 2013-11-03
    • 2016-12-10
    • 2018-08-07
    相关资源
    最近更新 更多