开始
编辑本页开始
安装
添加lexik / jwt-authentication-bundle到你的composer.json
文件:
1
$php的作曲家。phar要求“lexik / jwt-authentication-bundle”
注册bundle
将bundle注册到配置/ bundles.php
(Flex自动完成):
1 2 3 4
返回[/ /……Lexik \包\ JWTAuthenticationBundle \ LexikJWTAuthenticationBundle::Class => [“所有”= >真正的]];
生成SSL密钥
1
$PHP bin/console lexk:jwt:生成对偶
你的钥匙会插进去的配置/ jwt / private.pem
而且配置/ jwt / public.pem
(除非您配置了不同的路径)。
可用的选项:
——skip-if-exists
如果键已经存在,将静默不做任何事情。——覆盖
将覆盖您的密钥,如果它们已经存在。
否则,将引发一个错误以防止您意外地覆盖您的键。
配置
配置SSL密钥路径和密码短语.env
:
1 2 3
JWT_SECRET_KEY = % kernel.project_dir % / config / jwt /私人。pem JWT_PUBLIC_KEY = % kernel.project_dir % / config / jwt /公众。pem JWT_PASSPHRASE =
1 2 3 4 5 6
#配置/包/ lexik_jwt_authentication.yamllexik_jwt_authentication:secret_key:' % env(解决:JWT_SECRET_KEY) %创建令牌时需要#public_key:' % env(解决:JWT_PUBLIC_KEY) %标记验证需要#pass_phrase:' % env (JWT_PASSPHRASE) %创建令牌时需要#token_ttl:3600#单位为秒,默认为3600
配置应用程序安全性
谨慎
确保防火墙登录
是之前的地方api
,如果主要
存在,就把它放在后面api
,否则你会遇到/ api / login_check
没有找到路由。
ob娱乐下载5.3之前的Symfony版本
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
#配置/包/ security.yaml安全:#……防火墙:登录:模式:^ / api /登录无状态:真正的json_login:check_path:/ api / login_check#或config/routes.yaml中定义的api_login_checksuccess_handler:lexik_jwt_authentication.handler.authentication_successfailure_handler:lexik_jwt_authentication.handler.authentication_failureapi:模式:^ / api无状态:真正的警卫:身份验证器:-lexik_jwt_authentication.jwt_token_authenticatoraccess_control:-{路径:^ / api /登录,角色:IS_AUTHENTICATED_ANONYMOUSLY}-{路径:^ / api,角色:IS_AUTHENTICATED_FULLY}
ob娱乐下载Symfony 5.3及更高版本
12 3 4 5 6 7 8 9 10 11 12 13 14 16 17 18 19 20 21 22
#配置/包/ security.yaml安全:enable_authenticator_manager:真正的#……防火墙:登录:模式:^ / api /登录无状态:真正的json_login:check_path:/ api / login_checksuccess_handler:lexik_jwt_authentication.handler.authentication_successfailure_handler:lexik_jwt_authentication.handler.authentication_failureapi:模式:^ / api无状态:真正的jwt:~access_control:-{路径:^ / api /登录,角色:PUBLIC_ACCESS}-{路径:^ / api,角色:IS_AUTHENTICATED_FULLY}
配置应用路由
1 2 3
#配置/ routes.yamlapi_login_check:路径:/ api / login_check
启用API平台兼容性
要启用API的平台兼容性,添加lexik_jwt_authentication.api_platform.check_path
配置选项如下:
1 2 3 4 5
#配置/包/ lexik_jwt_authentication.yamllexik_jwt_authentication:#……api_platform:check_path:/ api / login_check
使用
1.获取令牌
第一步是使用凭证对用户进行身份验证。你可以用一个简单的curl命令来测试获得令牌,就像这样(适应主机和端口):
Linux或macOS:
1
$curl -X POST -H“application / json内容类型:https://localhost/api/login_check - d{“用户名”:“johndoe”,“密码”:“测试”}”
窗口:
1
C:\> curl -X POST -H“application / json内容类型:https://localhost/api/login_check——数据{\“用户名\”,\“johndoe \”,\“密码\”,\“测验\ "}
如果成功了,你会收到这样的东西:
1 2 3
{“令牌”:“eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXUyJ9.eyJleHAiOjE0MzQ3Mjc1MzYsInVzZXJuYW1lIjoia29ybGVvbiIsImlhdCI6IjE0MzQ2NDExMzYifQ.nh0L_wuJy6ZKIQWh6OrW5hdLkviTs1_bau2GqYdDCB0Yqy_RplkFghsuqMpsFls8zKEErdX5TYCOR7muX0aQvQxGQ4mpBkvMDhJ4-pE4ct2obeMTr_s4X8nC00rBYPofrOONUOR4utbzvbd4d2xT_tj4TdR_0tsr91Y7VskCRFnoXAnNT-qQb7ci7HIBTbutb9zVStOFejrb4aLbr7Fl4byeIEYgp2Gd7gY”}
存储它(客户端),JWT可重用直到其TTL过期(默认为3600秒)。
例子
看到功能测试一个受JWT保护的api文档或沙盒应用程序ob娱乐下载Symfony4)以获得一个完整的工作示例。
笔记
Apache用户需要注意的重要事项
如这个链接而且这一个, Apache服务器将剥离任何授权头
不是有效的HTTP BASIC认证格式。
如果你打算使用这个bundle的授权头模式(你应该),请将这些规则添加到你的VirtualHost配置中:
1
SetEnvIf授权“(. *)”HTTP_AUTHORIZATION =1美元
此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。