maaarghk/magento-jwt-refresh-service

添加一个API服务用于刷新Magento JWTs

安装: 147

依赖: 0

建议者: 0

安全: 0

星星: 2

关注者: 1

分支: 0

开放问题: 1

类型:magento2-module

1.0.0 2023-07-14 16:51 UTC

This package is auto-updated.

Last update: 2024-09-14 19:36:55 UTC


README

添加一个API端点 POST /V1/integration/admin/token/refresh 用于从授权头刷新JWT。目前不支持客户令牌,但欢迎PR。

例如:

$ curl --json '{"username": "username", "password": "password"}' http://mysite.docker/rest/V1/integration/admin/token/
"eyJraWQiOiIxIiwiYWxnIjoiSFMyNTYifQ.eyJ1aWQiOjY4LCJ1dHlwaWQiOjIsImlhdCI6MTY4OTM1MDYxOCwiZXhwIjoxNjg5MzU0MjE4fQ.Y2J6BVDFzBjSWP8MtfEievFplU21YyG40h56CLDIo9c"

$ curl -XPOST --data "" -H "Authorization: Bearer eyJraWQiO<etc>" http://mysite.docker/rest/V1/integration/admin/token/refresh/
"eyJraWQiOiIxIiwiYWxnIjoiSFMyNTYifQ.eyJ1aWQiOjY4LCJ1dHlwaWQiOjIsImlhdCI6MTY4OTM1MDYxOCwiZXhwIjoxNjg5MzU0MjQ3fQ.7TM1LlZ-1ONAQroFO_HVJWCqdl-ig8CCV1Sl-D3eCoA"

JWT不应该是短生命周期的,并且只能使用刷新令牌进行扩展吗?

我想是的。一个典型的建议是刷新令牌应该有效期为七天,因此我将接受一个PR,该PR验证提供的JWT不是在7天前签发的。这个模块会努力确保刷新令牌不会更新问题日期,因此强制最大年龄应该不会太难。

(您可以使用上面的curl示例中的base64 -d来验证两个令牌的iat声明相同,但exp声明被扩展了。)

BYOT

如果您不是使用Bearer令牌,但正在使用JWT,您可以提供以下这样的刷新令牌

class Whatever
{
    public function __construct(
        private \FTS\JwtRefreshService\Api\JwtRefreshServiceInterfaceFactory $jwtRefreshServiceFactory
    ) {}

    public function refreshToken(string $token)
    {
        $jwtRefreshService = $this->jwtRefreshServiceFactory->create([
            'token' => $token
        ]);
        return $jwtRefreshService->refreshAdminToken();
    }
}

为什么这么复杂?

magento-jwt-refresh-service/src/Model/Api/JwtRefreshService.php

第48至58行在 7827d6b

// 我们不希望新令牌的“签发时间”与原始令牌相比发生变化
// 因为新令牌应该
// 受初始登录时间的撤销影响。
//
// 尽管UserTokenParameters类接受一个“签发”参数,
// 我们不能简单地使用它,因为它总是用来计算
// 过期日期(即如果我们将其设置为原始签发时间,那么
// 令牌就没有其过期时间刷新。)
//
// 因此,我们使用JWT管理器类的插件来重写它
// 接收到的JWT有效载荷。

帮助

我不太可能满足任何功能请求,因此请提供与您拥有的任何请求一起的合并请求。

欢迎带有测试的MRs - 应该足够简单,可以验证返回的令牌具有相同的声明和用户上下文,并且刷新的令牌仍然有效。