美居的 JWT 密钥
JWT key for mercure
我尝试为 Mercure 设置生成 JWT 密钥
我用这个手册
传递 myJWTKey JWT 是
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJtZXJjdXJlIjp7InN1YnNjcmliZSI6W10sInB1Ymxpc2giOlsiKiJdfX0.iTVjHoLv9bB-O5RNnTtzOFxIW-YECk2JXZeMekZ4GwA
我找到了一个令牌生成器(已签名 JSON 网络令牌)
http://jwtbuilder.jamiekurtz.com/
但我发现没有生成正确 JWT 的设置。我该怎么做?我想念什么?
我尝试为环境设置生成令牌
MERCURE_PUBLISH_URL=http://mercure.dev:3000/.well-known/mercure
# The default token is signed with the secret key: !ChangeMe!
MERCURE_JWT_TOKEN=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJtZXJjdXJlIjp7InN1YnNjcmliZSI6W10sInB1Ymxpc2giOlsiKiJdfX0.iTVjHoLv9bB-O5RNnTtzOFxIW-YECk2JXZeMekZ4GwA
###< symfony/mercure-bundle ###
此令牌用于 docker-compose
中的默认密码
mercure:
image: dunglas/mercure
environment:
# You should definitely change all these values in production
- JWT_KEY=myJWTKey
- DEMO=1
- ALLOW_ANONYMOUS=1
- HEARTBEAT_INTERVAL=30s
- ADDR=:3000
如果我将 myJWTKey 更改为 mysecure pass - 我如何生成令牌?
抱歉回答晚了,您可以使用官方页面 https://jwt.io/.
生成新的 jwt
令牌
你可以使用不同的库来做到这一点,一个非常简单和快速的库是 php-jwt
然后做
composer require firebase/php-jwt
然后在代码中你可以这样做:
use \Firebase\JWT\JWT;
$key = "12345678";
$payload = [
'mercure' => [
'publish' => ['*'],
],
];
$jwt = JWT::encode($payload, $key); // holds valid jwt now
该库将自动注入您需要的 headers(默认值:alg HS256,典型值:jwt)并为您设置负载。然后将其编码为 base64 并对其进行签名。
继续使用此 jwt 设置 cookie 或在授权中使用它 header 现在:-)
如果您想使用 JWT 进行订阅者身份验证,请不要忘记将订阅密钥放入有效负载中。
$payload = [
'mercure' => [
'subscribe' => ['*'], // make this a list of concrete topics, don't use *
],
];
同样对于该用例,您可以通过提供带有 object:
的有效负载密钥来在 cookie 中携带一些数据
$payload = [
'mercure' => [
'subscribe' => ['*'],
'payload' => [
'userId' => $user->getId()
]
],
];
只是对@Daidon 的精彩回答的补充。 Mercure bundle 使用 lcobucci/jwt 并将其工厂注册为服务。
如果要生成 JWT,请执行以下操作
- 使用
@mercure.hub.default.jwt.factory
将工厂作为参数传递(此处 default
是您的集线器名称)
- 在你的service/controller
public function generateJwt(LcobucciFactory $factory): string
{
return $factory->create(['*']);
}
更新:获取 JWT 令牌的更简单方法
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Mercure\Authorization;
public function generateJwt(Request $request, Authorization $authorization): string
{
return $authorization->createCookie($request, ['*'])->getValue();
}
我尝试为 Mercure 设置生成 JWT 密钥
我用这个手册
传递 myJWTKey JWT 是
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJtZXJjdXJlIjp7InN1YnNjcmliZSI6W10sInB1Ymxpc2giOlsiKiJdfX0.iTVjHoLv9bB-O5RNnTtzOFxIW-YECk2JXZeMekZ4GwA
我找到了一个令牌生成器(已签名 JSON 网络令牌)
http://jwtbuilder.jamiekurtz.com/
但我发现没有生成正确 JWT 的设置。我该怎么做?我想念什么?
我尝试为环境设置生成令牌
MERCURE_PUBLISH_URL=http://mercure.dev:3000/.well-known/mercure
# The default token is signed with the secret key: !ChangeMe!
MERCURE_JWT_TOKEN=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJtZXJjdXJlIjp7InN1YnNjcmliZSI6W10sInB1Ymxpc2giOlsiKiJdfX0.iTVjHoLv9bB-O5RNnTtzOFxIW-YECk2JXZeMekZ4GwA
###< symfony/mercure-bundle ###
此令牌用于 docker-compose
中的默认密码 mercure:
image: dunglas/mercure
environment:
# You should definitely change all these values in production
- JWT_KEY=myJWTKey
- DEMO=1
- ALLOW_ANONYMOUS=1
- HEARTBEAT_INTERVAL=30s
- ADDR=:3000
如果我将 myJWTKey 更改为 mysecure pass - 我如何生成令牌?
抱歉回答晚了,您可以使用官方页面 https://jwt.io/.
生成新的jwt
令牌
你可以使用不同的库来做到这一点,一个非常简单和快速的库是 php-jwt
然后做
composer require firebase/php-jwt
然后在代码中你可以这样做:
use \Firebase\JWT\JWT;
$key = "12345678";
$payload = [
'mercure' => [
'publish' => ['*'],
],
];
$jwt = JWT::encode($payload, $key); // holds valid jwt now
该库将自动注入您需要的 headers(默认值:alg HS256,典型值:jwt)并为您设置负载。然后将其编码为 base64 并对其进行签名。
继续使用此 jwt 设置 cookie 或在授权中使用它 header 现在:-)
如果您想使用 JWT 进行订阅者身份验证,请不要忘记将订阅密钥放入有效负载中。
$payload = [
'mercure' => [
'subscribe' => ['*'], // make this a list of concrete topics, don't use *
],
];
同样对于该用例,您可以通过提供带有 object:
的有效负载密钥来在 cookie 中携带一些数据$payload = [
'mercure' => [
'subscribe' => ['*'],
'payload' => [
'userId' => $user->getId()
]
],
];
只是对@Daidon 的精彩回答的补充。 Mercure bundle 使用 lcobucci/jwt 并将其工厂注册为服务。
如果要生成 JWT,请执行以下操作
- 使用
@mercure.hub.default.jwt.factory
将工厂作为参数传递(此处default
是您的集线器名称) - 在你的service/controller
public function generateJwt(LcobucciFactory $factory): string
{
return $factory->create(['*']);
}
更新:获取 JWT 令牌的更简单方法
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Mercure\Authorization;
public function generateJwt(Request $request, Authorization $authorization): string
{
return $authorization->createCookie($request, ['*'])->getValue();
}