我正在尝试使用捆绑 LexikJWTAuthenthicationBundle 来创建安全 API,但我并没有真正设法使用这个捆绑。事实上,我按照他们的 GitHub 项目中的说明进行了配置,还创建了一个 ApiBundle,但我不明白如何使用 url /api/login 登录。
你能帮我或给我一个教程的链接吗?
谢谢
我正在尝试使用捆绑 LexikJWTAuthenthicationBundle 来创建安全 API,但我并没有真正设法使用这个捆绑。事实上,我按照他们的 GitHub 项目中的说明进行了配置,还创建了一个 ApiBundle,但我不明白如何使用 url /api/login 登录。
你能帮我或给我一个教程的链接吗?
谢谢
首先,您需要阅读有关Json Web Token Authentication的更多信息。
当您正确理解了与您所知道的其他类型身份验证的原理和区别时,请查看这个很好的示例:
slashfan/LexikJWTAuthenticationSandbox
它为 API 和 AngularJS 应用程序提供了一个工作配置,该应用程序通过验证用户来使用 API。
您应该密切关注自述文件,尝试示例并分析 javascript 代码。
这个过程真的很容易理解:
假设您在数据库中注册了一些用户,该用户将向您的登录路径发出请求。
该请求包含用户凭据(通常是用户名/密码),就像您可以在用户提交其登录表单时以基于表单的身份验证一样。
API 有一个自动处理登录路由的防火墙。
(防火墙由配置部分的捆绑文档提供)
当防火墙拦截请求时,会触发一个事件并由 LexikJWT 处理身份验证。
如果凭证对应于有效用户,则会创建一个 JWToken 并将其添加到响应中。
否则,响应看起来像Bad Credentials
带有401 Unauthorized
状态。
Authorization: Bearer {token}
然后,您必须通过在下一个请求中添加一个来使用令牌。对于与需要进行身份验证的资源相对应的所有请求(受您的安全配置保护)也是如此。
我希望它对您来说更清楚,您可以使用这个强大的捆绑和身份验证协议。
@theflow我认为你误解了一些东西:
这是文档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)