开始

编辑本页

开始

先决条件

这个包需要Symfony 4.4+和opeob娱乐下载nssl扩展。

Protip:虽然捆绑包没有强制您这样做,但强烈建议使用HTTPS。

安装

添加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秒)。

2.使用令牌

只需将每个请求上的JWT作为授权头或查询参数传递给受保护的防火墙。

默认情况下,只启用授权头模式:授权:持有者{token}

看到配置引用文档中启用查询字符串参数模式或更改头值前缀。

例子

看到功能测试一个受JWT保护的api文档或沙盒应用程序ob娱乐下载Symfony4)以获得一个完整的工作示例。

笔记

关于令牌过期

令牌过期后的每个请求都将导致401响应。重做身份验证过程以获得一个新的令牌。

也许你想用刷新令牌续订你的JWT。在这种情况下,你可以检查一下JWTRefreshTokenBundle

处理CORS请求

这是一个与Symfony2相关的主题ob娱乐下载,但是请注意处理CORS请求文件,以快速了解如何处理CORS申请。

Apache用户需要注意的重要事项

这个链接而且这一个, Apache服务器将剥离任何授权头不是有效的HTTP BASIC认证格式。

如果你打算使用这个bundle的授权头模式(你应该),请将这些规则添加到你的VirtualHost配置中:

1
SetEnvIf授权“(. *)”HTTP_AUTHORIZATION =1美元
此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。