【问题标题】:Trying to verify JWT signature Tymon/jwt-auth laravel试图验证 JWT 签名 Tymon/jwt-auth laravel
【发布时间】:2020-05-11 18:26:56
【问题描述】:

我正在尝试构建一个从私钥生成签名令牌的微服务单点登录。该令牌将用于访问微服务。到目前为止,我已经让这部分工作并生成了一个令牌。

但是,当我尝试使用公钥验证它时,它似乎不起作用。

文件没有透露太多。 https://jwt-auth.readthedocs.io/en/develop/lumen-installation/

所以问题是,如果其他库拥有与私钥相关联的公钥,是否可以验证 JWT 令牌?

【问题讨论】:

  • 看到这个[链接]medium.com/employbl/…我认为它可能会有所帮助
  • @SohaibEl-Khatib 谢谢!我已经主要实现了这一点。通过更改和添加私钥并更改算法,我比这更进一步(不在教程或文档中)。本教程做了一个简单的 JWT,但没有使用私钥对其进行签名以供其他应用程序验证。此令牌对其他 api 不安全。

标签: php laravel jwt


【解决方案1】:

好的,这就是你的做法。

按照上面链接中的安装说明进行操作。

然后,转到此页面https://travistidwell.com/jsencrypt/demo/ 创建一个私钥和公钥(记得使用 key size 1024 - 这就是我要的)

将私钥保存到生成令牌的项目/微服务中。

然后在该项目中转到您的 config->jwt.php 文件

  1. 将你的设置为'algo' => env('JWT_ALGO', 'RS256') 否则它不会签名。
  2. 将“keys.private”设置为 private.pem 的路径
  3. 将您的 keys.public 设置为您的 public.pem 的路径

然后要创建您的令牌,您可以使用:

$credentials = request(['email', 'password']);
try {
    $token = $JWTAuth->attempt($credentials);

    if(!$token) {
        throw new AccessDeniedHttpException();
    }

} catch (JWTException $e) {
    throw new HttpException(500);
}

return response()->json([
    'status' => 'ok',
    'token' => $token
]);

你得到你的令牌,你的令牌是用私钥签名的。

现在您可以将此令牌用于您的 laravel 设置之外的其他微服务。

您是否应该使用 laravel 进行另一个单独的设置(其他 url),需要一个受信任的令牌才能访问,然后进行与上述相同的设置(私钥在这里不重要),但您的公钥是。

要验证令牌,请添加此代码。

JWTAuth::parseToken()->authenticate();

显然,您可以通过添加声明等来扩展它。这是一个简单的设置。 我希望这可以帮助别人。

【讨论】:

    猜你喜欢
    • 2018-11-28
    • 2017-06-10
    • 2020-05-11
    • 2017-04-03
    • 2019-05-22
    • 2018-07-30
    • 2018-02-11
    • 2019-08-08
    • 2017-09-17
    相关资源
    最近更新 更多