nviimedia / pimcore-jwt-auth
模块允许使用 JWT 与 Pimcore 用户对象
Requires
- php: >=7.2
- lexik/jwt-authentication-bundle: ^2.8
- nelmio/cors-bundle: ^2.1
- pimcore/pimcore: ~6.9.0
This package is auto-updated.
Last update: 2024-09-21 01:42:31 UTC
README
此包为 Pimcore API 提供了 JWT(Json Web Token)身份验证。它基于 lexik/jwt-authentication-bundle
它与 PHP 7 和 Pimcore 6 兼容并经过测试。
目录
先决条件
此模块需要 Pimcore 6 和 openssl 扩展。
安装
在 Pimcore 中创建 User 类
在 app/AppKernel.php 中注册依赖关系
public function registerBundlesToCollection(BundleCollection $collection) { // ... if (class_exists('Lexik\Bundle\JWTAuthenticationBundle\LexikJWTAuthenticationBundle')) { $collection->addBundle(new Lexik\Bundle\JWTAuthenticationBundle\LexikJWTAuthenticationBundle()); } if (class_exists('Nelmio\CorsBundle\NelmioCorsBundle')) { $collection->addBundle(new Nelmio\CorsBundle\NelmioCorsBundle()); } }
生成 SSH 密钥
$ mkdir app/config/jwt $ openssl genrsa -out app/config/jwt/private.pem -aes256 4096 $ openssl rsa -pubout -in app/config/jwt/private.pem -out config/jwt/public.pem
如果第一个 openssl 命令要求您输入密码,请使用以下命令获取解密后的私钥
$ openssl rsa -in app/config/jwt/private.pem -out config/jwt/private2.pem $ mv app/config/jwt/private.pem config/jwt/private.pem-back $ mv app/config/jwt/private2.pem config/jwt/private.pem
配置
在您的 app/config/lexik_jwt_authentication.yaml 中配置 SSH 密钥路径
lexik_jwt_authentication: secret_key: '%kernel.project_dir%/app/config/jwt/private.pem' # required for token creation public_key: '%kernel.project_dir%/app/config/jwt/public.pem' # required for token verification pass_phrase: 'your_secret_passphrase' # required for token creation, usage of an environment variable is recommended token_ttl: 3600
在 app/config/nelmio_cors.yml 中配置 CORS 配置
nelmio_cors: defaults: allow_credentials: false allow_origin: [] allow_headers: [] allow_methods: [] expose_headers: [] max_age: 0 hosts: [] origin_regex: false forced_allow_origin_value: ~ paths: '^/api/': allow_origin: ['*'] allow_headers: ['*'] allow_methods: ['POST', 'PUT', 'GET', 'DELETE'] max_age: 3600
配置您的 app/config/security.yml
security: # ... providers: pimcore_user_provider: id: login_bundle.security.user_provider firewalls: login: pattern: ^/api/login stateless: true anonymous: true provider: pimcore_user_provider json_login: check_path: /api/login success_handler: lexik_jwt_authentication.handler.authentication_success failure_handler: lexik_jwt_authentication.handler.authentication_failure api: pattern: ^/api stateless: true provider: pimcore_user_provider guard: authenticators: - lexik_jwt_authentication.jwt_token_authenticator access_control: - { path: ^/api/login, roles: IS_AUTHENTICATED_ANONYMOUSLY } - { path: ^/api, roles: IS_AUTHENTICATED_FULLY }
配置您的 app/config/config.yml
imports: # ... - { resource: lexik_jwt_authentication.yml } - { resource: nelmio_cors.yml }
配置您的 config/routing.yml
api_login_check: path: /api/login
使用方法
第一步是使用其凭据对用户进行身份验证。在匿名可访问的防火墙上进行经典的 form_login 即可。
只需设置提供的 lexik_jwt_authentication.handler.authentication_success 服务作为成功处理器来生成令牌并将其作为 JSON 响应体的一部分发送。
存储它(客户端),JWT 在其 ttl 过期之前可重复使用(默认为 3600 秒)。在 Pimcore 面板中创建一个 User 类的对象并填写其凭据。
注意:您可以使用类似于以下简单的 curl 命令来测试获取令牌
curl -X POST -H "Content-Type: application/json" https:///api/login -d '{"username":"admin","password":"test"}'
如果它正常工作,您将收到类似以下内容
{
"token" : "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXUyJ9.eyJleHAiOjE0MzQ3Mjc1MzYsInVzZXJuYW1lIjoia29ybGVvbiIsImlhdCI6IjE0MzQ2NDExMzYifQ.nh0L_wuJy6ZKIQWh6OrW5hdLkviTs1_bau2GqYdDCB0Yqy_RplkFghsuqMpsFls8zKEErdX5TYCOR7muX0aQvQxGQ4mpBkvMDhJ4-pE4ct2obeMTr_s4X8nC00rBYPofrOONUOR4utbzvbd4d2xT_tj4TdR_0tsr91Y7VskCRFnoXAnNT-qQb7ci7HIBTbutb9zVStOFejrb4aLbr7Fl4byeIEYgp2Gd7gY"
}
使用令牌
简单地将 JWT 传递到每个受保护的防火墙请求中,无论是作为授权头还是作为查询参数。
默认情况下,仅启用授权头模式: Authorization: Bearer {token}
关于令牌过期
令牌过期后的每个请求都将导致 401 响应。重新执行身份验证过程以获取新的令牌。
也许您想使用 刷新令牌 来更新您的 JWT。在这种情况下,您可以检查 JWTRefreshTokenBundle。
更多详细信息
有关更多详细信息,请参阅 LexikJWTAuthenticationBundle
标准与代码质量
此模块遵守 PSR-2 代码质量规则和我们的 PHPCS 和 PHPMD 规则集。
关于作者
我们是一家来自欧洲的软件公司,自 2008 年成立以来,拥有约 150 名员工。我们的核心竞争力围绕着 Magento、Pimcore 和定制软件项目(我们喜欢 Symfony3、Node.js、Angular、React、Vue.js)。我们专注于复杂的集成项目,试图将硬核 IT 与优秀的产品设计和 UX 连接起来。
我们为 INTERSPORT、ING、Odlo、Onderdelenwinkel 和 CDP 等客户工作,CDP 是制作《巫师》游戏的公司。我们开发了两个项目: Open Loyalty - 一个开源的忠诚度计划,以及 Vue.js Storefront。
我们是华沙证券交易所上市公司OEX集团的一部分。我们的年收入每年至少增长约30%。
访问我们的网站Divante.co获取更多信息。
