我的 Symfony 5 应用程序提供:
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/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 都会自动处理剩下的事情。