1

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

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

谢谢

4

2 回答 2

2

首先,您需要阅读有关Json Web Token Authentication的更多信息。

当您正确理解了与您所知道的其他类型身份验证的原理和区别时,请查看这个很好的示例:

slashfan/LexikJWTAuthenticationSandbox

它为 API 和 AngularJS 应用程序提供了一个工作配置,该应用程序通过验证用户来使用 API。

您应该密切关注自述文件,尝试示例并分析 javascript 代码。

这个过程真的很容易理解:

假设您在数据库中注册了一些用户,该用户将向您的登录路径发出请求。
该请求包含用户凭据(通常是用户名/密码),就像您可以在用户提交其登录表单时以基于表单的身份验证一样。

API 有一个自动处理登录路由的防火墙。
(防火墙由配置部分的捆绑文档提供)

当防火墙拦截请求时,会触发一个事件并由 LexikJWT 处理身份验证。

如果凭证对应于有效用户,则会创建一个 JWToken 并将其添加到响应中。
否则,响应看起来像Bad Credentials带有401 Unauthorized状态。

Authorization: Bearer {token}然后,您必须通过在下一个请求中添加一个来使用令牌。对于与需要进行身份验证的资源相对应的所有请求(受您的安全配置保护)也是如此。

我希望它对您来说更清楚,您可以使用这个强大的捆绑和身份验证协议。

于 2016-02-13T12:19:15.647 回答
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)
于 2019-04-03T02:56:04.483 回答