Symfony,安全性.Yaml:对同一个uri同时使用表单和令牌身份验证



我的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端点,如api/entry/get/1连接时作为管理员(即不使用令牌,但通过常规形式登录凭据)?

这将使使用swagger沙盒更加容易。

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

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

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

换句话说:symfony只是不检查会话/cookie可能(以前)登录的(admin)用户允许/拒绝所有/api路由的访问。

不幸的是,我没有机会与OAuth2ServerBundle一起工作。所以可能会有一个配置

但是:

尝试使用stalesscontext

对无状态
  • 语境对

然而,RESTful api在设计上是无状态的,它不仅仅是一个花哨的流行语。

还可以添加"Authorize"按钮到您的swagger文档/playground,这样任何访问swaggerUI的人都可以粘贴一个有效的认证令牌(JWT),并且所有来自swaggerUI的进一步请求都将被授权。参见Swagger和JWT令牌身份验证

我也有一个美妙的经历失眠http-client特别是当我需要测试/玩我的api。

它有很好的OAuth v.2支持。免费层对于本地开发/快速测试来说绰绰有余。只需指定您的令牌路径,选择GrantType为"资源所有者";粘贴您的admin用户的用户名/密码,失眠将处理剩下的自动魔术每次击中受保护的/api/entry/get/1

最新更新