开始
编辑该页面开始
安装
添加lexik / jwt-authentication-bundle到你的composer.json
文件:
1
美元php的作曲家。phar要求“lexik / jwt-authentication-bundle”
注册包
注册包进配置/ bundles.php
(Flex是自动):
1 2 3 4
返回(/ /……Lexik \包\ JWTAuthenticationBundle \ LexikJWTAuthenticationBundle::类= > [“所有”= >真正的]];
生成SSL密钥
1
美元php bin /控制台lexik: 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
没有找到。
欧宝娱乐app下载地址Symfony 5.3版本之前
1 2 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#或api_login_check配置/ routes.yaml中定义success_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}
欧宝娱乐app下载地址Symfony 5.3和更高版本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 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
使用
1。获得令牌
第一步是对用户使用其凭据进行身份验证。您可以测试得到令牌与这样一个简单的curl命令(适应主机和端口):
Linux或macOS:
1
美元curl - x - h后“application / json内容类型:https://localhost/api/login_check - d{“用户名”:“johndoe”,“密码”:“测试”}”
窗口:
1
C: \ > curl - x - 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文档或沙箱的应用程序欧宝娱乐app下载地址Symfony4),一个完整的工作的例子。
笔记
重要的注意为Apache用户
如上所述的这个链接和这一个,Apache服务器将地带授权头
不是一个有效的HTTP基本认证格式。
如果你打算使用这个包的授权头模式(你应该),请将这些规则添加到您的虚拟主机配置:
1
SetEnvIf授权“(. *)”HTTP_AUTHORIZATION =1美元
这项工作,包括代码示例,许可下Creative Commons冲锋队3.0许可证。