marten-cz / nette-jwt-user-storage
使用 JWT 代替会话的 Nette IUserStorage 实现。
v2.1.0
2020-04-24 15:43 UTC
Requires
- php: >=7.2
- firebase/php-jwt: ^3.0|^4.0|^5.0
- nette/http: ^3.0
- nette/security: ^3.0
Requires (Dev)
- nette/di: ^3.0
- nette/tester: ^2.3
- vimeo/psalm: ^3.8
This package is not auto-updated.
Last update: 2024-09-20 04:01:05 UTC
README
使用 JWT 访问令牌而不是 PHP 会话的 Nette IUserStorage 实现。
在用户登录时,应用程序存储 jwt_access_token
cookie 而不是古老的 PHPSESSID
。该 cookie 包含由应用程序签名的编码 JWT。然后用户认证基于验证 JWT 而不是会话。
警告:CSRF 保护规则仍然适用!
这意味着您不再需要解决 PHP 会话实现、扩展和测试问题。您通常会存储在 SessionStorage
中的所有内容都可以存储在键值存储中,其中 JWT 是一个键。
这也意味着您的应用程序未来准备好成为单页应用程序(SPA)。:)
配置
在您的 config.neon
中注册扩展。
extensions: jwtUserStorage: Marten\Nette\JwtStorage\DI\JWTUserStorageExtension
然后配置其所需属性。
JWTUserStorage: privateKey: 'secret-cat' # this secret is used to sign the JWT algorithm: 'HS256' # this is the signing algorithm
默认情况下,JWT 和存储它的 cookie 都设置为在 20 天后过期。如果您想调整过期时间,请使用 expiration
选项。
JWTUserStorage: expiration: 20 days # sets JWT and cookie expiration time to 20 days (this is the default option) expiration: 20 minutes # sets JWT and cookie expiration time to 20 minutes expiration: false # sets JWT and cookie to never expire
默认情况下,jti
和 iat
(见 JWT 草案)会添加到您的 JWT 中。如果您不想使用它们,请将 generateJti
和 generateIat
选项设置为 false。
JWTUserStorage: generateJti: false # disables jti generation for your JWT access tokens generateIat: false # disables iat generation for your JWT access tokens
如果您想定义自己的 Nette\Security\IIdentity
序列化器,它将序列化您的身份实现到 JWT 主体中,您可以实现 Marten\Nette\JwtStorage\\IIdentitySerializer
。
namespace Your\Own;
class IdentitySerializer implements \Marten\Nette\JwtStorage\Security\IIdentitySerializer
{
// ...
}
并在配置中注册它。
JWTUserStorage: identitySerializer: Your\Own\IdentitySerializer
就是这样,您已经准备就绪!
已知问题
- 如果您正在开发使用 JWT 用户存储的应用程序,但仍然在 cookie 中看到
PHPSESSID
,那么这很可能是由于 Tracy\Tracy 使用它。
讨论线程
- 在 Nette 论坛 上的捷克讨论线程