我正在使用symfony中的API,用户使用json web令牌进行身份验证。这里提供了一个捆绑包:https://github.com/lexik/LexikJWTAuthenticationBundle。
项目页面上有关于如何设置所有内容的文档。此捆绑包依赖于标准的“form_login”配置,该配置由vendor / symfony / symfony / src / Symfony / Bundle / SecurityBundle / DependencyInjection / Security / Factory / FormLoginFactory.php中定义的类支持。
该bundle提供成功和失败侦听器,用于验证请求,并使用令牌或带有相应响应代码的错误返回JsonResponse。
使用项目页面上的示例配置,一切都按照描述进行。问题是这些预定义的配置工厂(如“form_login”)设置了cookie以及无状态API中不需要的许多其他行为。
安全组件定义了一个配置选项“无状态”,该选项在symfony安全书中定义。
但是上面的文档明确指出“如果你使用表单登录,即使你将无状态设置为true,Symfony2也会创建一个cookie。”
如果用户未经身份验证且api不需要,“form_login”有许多选项可用于重定向或转发到登录页面。
您可能想要使用的许多其他功能,例如SwitchUserListener在传统开发模型中根深蒂固,其中服务器只返回html。
我正在寻找创建一种轻量级方法,使用此捆绑包插入symfony安全性并禁用其他不需要的检查。
使用JWT,实际上不需要登录,我们需要一个未经身份验证的路由,我们使用返回令牌的授权标头向(通过SSL)发送用户名和密码。对于其他受保护的路由,我们只提供此令牌。这个部分已经由bundle提供了,我只需要一个简单的方法来获取初始令牌而不需要调用不需要的symfony代码。
我发现这个例子http://miguel.ibero.me/en/post/2012-04-04/symfony-rest-api.html实现了代码,可以绕过防火墙在简单的控制器中获取令牌。
我正在寻找使用防火墙实现此目的的更好方法。我怀疑我必须创建自己的安全工厂,例如“form_login”。
我可以使用http basic auth方法获取令牌,但我不希望symfony显示用户名/密码窗口。我希望验证器检查授权标头,只需返回一条消息和响应代码,无论它是否成功。
任何建议表示赞赏。