首页 > 解决方案 > 试图验证 JWT 签名 Tymon/jwt-auth laravel

问题描述

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

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

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

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

标签: phplaraveljwt

解决方案


好的,这就是你的做法。

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

然后,转到此页面https://travistidwell.com/jsencrypt/demo/ 创建一个私钥和公钥(记住使用密钥大小 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();

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


推荐阅读