Symfony 2:LexikJWTAuthenticationBundle的用法

时间:2015-02-26 18:40:23

标签: api symfony security lexikjwtauthbundle

我正在尝试使用捆绑LexikJWTAuthenthicationBundle来创建一个安全的API,但我真的没有设法使用这个捆绑包。事实上,我在他们的GitHub项目中完成了配置,我也创建了一个ApiBundle,但我不明白如何使用url / api / login登录。

你能帮助我或给我一个教程的链接吗?

由于

2 个答案:

答案 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我认为您误解了一些东西:

这是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)