ghost-agency / stateless-auth-bundle
处理无状态认证。
Requires
- php: >=7.0.0
- firebase/php-jwt: ^5.0
- symfony/config: ~2.8|~3.0|~4.0
- symfony/dependency-injection: ~2.8|~3.0|~4.0
- symfony/security: ~2.8|~3.0|~4.0
Requires (Dev)
- symfony/phpunit-bridge: ^4.0
This package is not auto-updated.
Last update: 2024-09-29 05:09:17 UTC
README
无需SSH密钥即可处理无状态认证。(灵感来自 LexikJWTAuthenticationBundle)
入门指南
先决条件
此包需要Symfony 2.8+。
提示:虽然此包不强制您这样做,但强烈建议使用HTTPS。
安装
将 ghost-agency/stateless-auth-bundle 添加到您的 composer.json 文件中
php composer.phar require "ghost-agency/stateless-auth-bundle"
在 app/AppKernel.php 中注册该包
public function registerBundles() { return array( // ... new GhostAgency\Bundle\StatelessAuthBundle\GhostAgencyStatelessAuthBundle(), ); }
配置
在您的 config.yml 中配置哈希密钥
ghost_agency_stateless_auth: hash_key: '%env(JWT_TOKEN_KEY)%' token_ttl: '%env(JWT_TOKEN_TTL)%' # Default to 3600 (1 hour)
配置您的 security.yml
security: # ... firewalls: main: pattern: ^/api/login stateless: true anonymous: true json_login: check_path: /api/login_check success_handler: ghost_agency_stateless_auth.success_handler require_previous_session: false api: pattern: ^/api stateless: true guard: authenticators: - ghost_agency_stateless_auth.guard access_control: - { path: ^/api/login, roles: IS_AUTHENTICATED_ANONYMOUSLY } - { path: ^/api, roles: IS_AUTHENTICATED_FULLY }
配置您的 routing.yml
api_login_check: path: /api/login_check
用法
1. 获取令牌
第一步是使用其凭证验证用户。一个匿名可访问的防火墙上的经典 form_login 就可以做到这一点。
只需将提供的 ghost_agency_stateless_auth.success_handler 服务设置为成功处理程序,生成令牌并将其作为 JSON 响应体的一部分发送。
存储它(客户端),JWT 在其 ttl 过期之前可重复使用(默认为 3600 秒)。
注意:您可以使用如下的简单 curl 命令测试获取令牌
curl -X POST https://:8000/api/login_check --data {"username": "Miaou", "password": "LeChat"}
如果成功,您将收到类似以下的内容
{
"token" : "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXUyJ9.eyJleHAiOjE0MzQ3Mjc1MzYsInVzZXJuYW1lIjoia29ybGVvbiIsImlhdCI6IjE0MzQ2NDExMzYifQ.nh0L_wuJy6ZKIQWh6OrW5hdLkviTs1_bau2GqYdDCB0Yqy_RplkFghsuqMpsFls8zKEErdX5TYCOR7muX0aQvQxGQ4mpBkvMDhJ4-pE4ct2obeMTr_s4X8nC00rBYPofrOONUOR4utbzvbd4d2xT_tj4TdR_0tsr91Y7VskCRFnoXAnNT-qQb7ci7HIBTbutb9zVStOFejrb4aLbr7Fl4byeIEYgp2Gd7gY"
}
2. 使用令牌
简单地将 JWT 作为授权头传递给每个受保护的防火墙请求。
默认情况下,仅启用授权头模式: Authorization: Bearer {token}
Apache用户的重要提示
如 此链接 和 此链接 中所述,Apache 服务器将删除任何不在有效 HTTP BASIC AUTH 格式中的 Authorization header。
如果您打算使用此包的授权头模式(您应该这样做),请将这些规则添加到您的 VirtualHost 配置中
RewriteEngine On RewriteCond %{HTTP:Authorization} ^(.*) RewriteRule .* - [e=HTTP_AUTHORIZATION:%1]