【问题标题】:Symfony 2: Usage of LexikJWTAuthenticationBundleSymfony 2:LexikJWTAuthenticationBundle 的使用
【发布时间】:2015-04-29 06:57:37
【问题描述】:
我正在尝试使用捆绑包 LexikJWTAuthenthicationBundle 来创建安全 API,但我并没有真正设法使用此捆绑包。事实上,我按照他们的 GitHub 项目中的说明进行了配置,还创建了一个 ApiBundle,但我不明白如何使用 url /api/login 登录。
你能帮我或给我一个教程的链接吗?
谢谢
【问题讨论】:
标签:
api
symfony
security
lexikjwtauthbundle
【解决方案1】:
首先,您需要阅读有关Json Web Token Authentication 的更多信息。
当你正确理解了你所知道的其他认证的原理和区别时,看看这个很好的例子:
slashfan/LexikJWTAuthenticationSandbox
它为 API 和 AngularJS 应用程序提供了一个工作配置,该应用程序通过验证用户来使用 API。
您应该仔细阅读自述文件,尝试示例并分析 javascript 代码。
这个过程真的很容易理解:
假设您在数据库中注册了一些用户,该用户将向您的登录路径发出请求。
该请求包含用户凭据(通常是用户名/密码),就像您可以在用户提交其登录表单时以基于表单的身份验证一样。
API 具有自动处理登录路由的防火墙。
(防火墙由配置部分的捆绑文档提供)
当防火墙拦截请求时,会触发一个事件并由 LexikJWT 处理身份验证。
如果凭据对应于有效用户,则会创建一个 JWToken 并将其添加到响应中。
否则,响应看起来像Bad Credentials,状态为401 Unauthorized。
然后,您必须通过将Authorization: Bearer {token} 添加到下一个请求来使用令牌。对于与需要进行身份验证的资源(受您的安全配置保护)相对应的所有请求也是如此。
我希望它对您来说更清楚,您可以使用这个强大的捆绑包和身份验证协议。
【解决方案2】:
@theflow 我认为你误解了一些东西:
这是the document中提到的防火墙配置(config/packages/security.yaml)
security:
# ...
firewalls:
login:
pattern: ^/api/login
stateless: true
anonymous: true
json_login:
check_path: /api/login_check
和路线(config/routes.yaml):
api_login_check:
path: /api/login_check
注意
pattern: ^/api/login
不是路由(用于登录),它只是查找将由该防火墙处理的匹配路由(例如:/api/login_check、/api/login/status 是匹配路由)的关键。
真正的登录路径由
定义
check_path: /api/login_check
您可以在这里输入路径或只输入路线名称:
pattern: api_login_check
所以,如果要使用路径/api/login登录,则必须更改路由定义(config/routes.yaml):
api_login_check:
path: /api/login
和防火墙配置:
security:
# ...
firewalls:
login:
pattern: ^/api/login
...
json_login:
check_path: /api/login (or api_login_check)