marten-cz/nette-jwt-user-storage

使用 JWT 代替会话的 Nette IUserStorage 实现。

v2.1.0 2020-04-24 15:43 UTC

This package is not auto-updated.

Last update: 2024-09-20 04:01:05 UTC


README

Latest Stable Version

JWT

使用 JWT 访问令牌而不是 PHP 会话的 Nette IUserStorage 实现。

免责声明:如果您不知道 JWT 是什么,请参阅 JWT 草案JWT 主页

在用户登录时,应用程序存储 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

默认情况下,jtiiat(见 JWT 草案)会添加到您的 JWT 中。如果您不想使用它们,请将 generateJtigenerateIat 选项设置为 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 使用它。

讨论线程

文献