divante-ltd / pimcore-jwt-auth
允许使用 JWT 与 Pimcore 用户对象集成的模块
Requires
- php: >=7.2
- lexik/jwt-authentication-bundle: ^2.8
- nelmio/cors-bundle: ^2.1
- pimcore/pimcore: ~6.7.0
This package is auto-updated.
Last update: 2024-08-29 05:19:11 UTC
README
此包为您的 Pimcore API 提供了 JWT (Json Web Token) 认证。它基于 lexik/jwt-authentication-bundle
它与 PHP 7 和 Pimcore 6 兼容并经过测试。
目录
先决条件
此模块需要 Pimcore 6 和 openssl 扩展。
安装
在 Pimcore 中创建用户类
在 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" http://localhost/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 Group 的一部分,该集团在华沙证券交易所上市。我们的年收入以至少每年 30% 的速度增长。
访问我们的网站 Divante.co 获取更多信息。