php - 有没有办法在 symfony 5 上通过防火墙设置登录超时?
问题描述
我需要能够为我拥有的每个防火墙设置不同的登录超时。
我怎样才能做到这一点?我只能为整个应用程序设置 cookie 生命周期,而不仅仅是社交防火墙处理的部分。此外,我找不到任何文档来通过防火墙分隔 cookie 的生命周期。还有其他方法吗?
我PdoSessionHandler
用作会话处理程序:
App\Config\Package\security.yaml
:
security:
# ... #
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
api:
anonymous: lazy
provider: social_user_provider
pattern: ^/app
logout:
path: social_logout
target: social_redirect_after_logout
guard:
authenticators:
- App\Security\TokenAuthenticator
remember_me:
secret: '%kernal.secret'
lifetime: 3600 # 1 hour
path: /
main:
anonymous: lazy
provider: app_user_provider
guard:
authenticators:
- App\Security\LoginFormAuthenticator
logout:
path: app_logout
# where to redirect after logout
target: app_login
remember_me:
secret: '%kernel.secret%'
lifetime: 604800 # 1 week in seconds
path: /
# ... #
App\Config\services.yaml
:
services:
# ... #
# Sessions handler
Symfony\Component\HttpFoundation\Session\Storage\Handler\PdoSessionHandler:
arguments:
- 'mysql:dbname=%env(resolve:DATABASE_NAME)%; host=%env(resolve:DATABASE_HOST)%; port=%env(resolve:DATABASE_PORT)%'
- { db_username: '%env(resolve:DATABASE_USER)%', db_password: '%env(resolve:DATABASE_PASSWORD)%' }
App\Config\Packages\framework.yaml
framework:
# ... #
session:
handler_id: Symfony\Component\HttpFoundation\Session\Storage\Handler\PdoSessionHandler
cookie_secure: auto
cookie_samesite: lax
解决方案
这是我将如何做到的:
创建覆盖 GuardAuthenticators 的自定义类,例如:
MyApiFirewallGuard extends App\Security\TokenAuthenticator
MyMainFirewallGuard extends App\Security\LoginFormAuthenticator
等等
然后,在您的 security.yaml 文件中使用这些类,您可能还必须将它们注册为服务以确保它们接收正确的构造参数。
现在在文档中您可以看到一些关于手动身份验证的信息:
https://symfony.com/doc/current/security/guard_authentication.html#manually-authenticating-a-user
这部分很有趣:
public function supports(Request $request)
{
+ // if there is already an authenticated user (likely due to the session)
+ // then return false and skip authentication: there is no need.
+ if ($this->security->getUser()) {
+ return false;
+ }
+ // the user is not logged in, so the authenticator should continue
+ return true;
}
在这里,您有一个会话,因此您可以执行自己的会话超时逻辑。覆盖的 GuardAuthenticators 内可能还有其他钩子/位置,它们也允许进一步将行为更改为您需要的行为。
推荐阅读
- oracle - Oracle中请求之间的分布式事务
- c# - 如何在透明表单上显示带有发光的图像
- javascript - React Native:图像不会在嵌套文本中垂直对齐中心
- python - Sklearn GridSearchCV 值错误:标签数与样本数不匹配
- python - 如何解决错误“int”对象在我的代码中没有属性“strftime”?
- amazon-web-services - SQS 需要大约 10 秒来处理传入消息是否正常,是否可以更快?
- accessibility - 为残障用户提供健全的云辅助功能支持(WCAG 第 508 节)
- api - 亚马逊 MWS Api GetPackageLabels PageSize > 1000
- oauth-2.0 - ADFS 2016 支持 OIDC 的“配置文件”范围?
- istio - 如何在 istio 中为子页面配置入口路由?