Symfony、security.yaml:对同一 uri 使用表单和令牌身份验证

问题描述 投票:0回答:1

我的 Symfony 5 应用程序提供:

  • api 端点,如
    api/entry/get/1
    (使用 oauth2 保护)
  • 管理页面如
    users/list
    (由数据库用户提供商保护)

为此,我的

security.yaml
使用了两个防火墙:

firewalls:
    api:
        pattern: ^/api(?!/doc$)
        security: true
        stateless: true
        oauth2: true
    main:
        lazy: true
        provider: app_user_provider
        form_login:
            login_path: app_login
            check_path: app_login
            enable_csrf: true
            default_target_path: app_index
            use_referer: true
        logout:
            path: app_logout
            target: app_index

当以管理员身份连接时,是否可以访问像

api/entry/get/1
这样的API端点(即不使用令牌,而是通过使用凭据的常规表单登录)?

这将使使用 swagger 沙箱变得更加容易。

api authentication symfony oauth firewall
1个回答
1
投票

以管理员身份连接时是否也可以访问 api/entry/get/1 等 api 端点(即不使用令牌,而是通过使用凭据的常规表单登录)?

我想说,在您当前的配置中,答案是

既然你

api
防火墙是
stateless: true
,那么只有一种方法可以告诉symfony请求应该被视为经过身份验证。每个请求中都存在
Bearer token
(可能是 JWT)。如果没有有效的令牌,所有对
/api
的请求都将被视为未经授权

换句话说:symfony 只是不检查可能的(以前)登录(管理员)用户的会话/cookie 以允许/拒绝所有

/api
路由的访问。

不幸的是,我没有机会与

OAuth2ServerBundle
合作。所以也许有一个配置。

但是:

尝试使用

stateless
context

但是,RESTful API 在设计上是无状态的,这不仅仅是一个花哨的流行词。

还有一种方法可以将“授权”按钮添加到您的 swagger 文档/playgroung 中,以便任何有权访问 swaggerUI 的人都可以粘贴有效的身份验证令牌 (JWT),并且来自 swaggerUI 的所有进一步请求都将获得授权。请参阅Swagger 和 JWT 令牌身份验证

我在 Insomnia http-client 方面也获得了美妙的体验,特别是当我需要测试/使用我的 api 时。

它具有出色的 OAuth v.2 支持。免费套餐对于本地开发/快速测试来说绰绰有余。只需指定您的令牌路径,选择 GrantType 作为“资源所有者”,粘贴您的管理员用户的用户名/密码,每次您点击受保护的/api/entry/get/1

时,insomnia 都会自动处理剩下的事情。
    

© www.soinside.com 2019 - 2024. All rights reserved.