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