最近改了下之前用symfony做的项目,然后,突然发现防火墙失效了,简单说就是再未登录状态下居然可以访问配置了ROLE_USER、ROLE_ADMIN这些权限的路由,symfony框架很强大,但是文档太拉跨,尤其关于防火墙配置这块真的就是说了个屁。由于时间过的太久,一些防火墙配置的关键特性忘记了,排查解决这个问题花了1天时间、郁闷,做个笔记吧,避免下次再忘。。。

symfony的安全组件名为 symfony/security-bundle,一般创建项目后就已经有了,也可以单独composer require;

配置

配置文件:

# config/packages/security.yaml

安全组件配置的几个关键特性:

  1. providers 用户提供者(至少有一个)一般为用户实体
  2. firewalls 防火墙(可以有多个,通过firewalls.pattern属性里的正则匹配路由)
  3. guard.authenticators 路由守卫/身份验证程序(一个服务名)
  4. access_control 访问控制指定某个/某些路由的访问权限(可以使用正则,更精确的匹配规则会覆盖宽泛的匹配规则)

案例:

# config/packages/security.yaml
security:
# https://symfony.com/doc/current/security.html#where-do-users-come-from-user-providers providers:
# users_in_memory: { memory: null }
app_user_provider:
entity:
class: 'App\Entity\User'
property: 'username' firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false api:
pattern: ^/api/
stateless: true
anonymous: true
provider: app_user_provider
guard:
authenticators:
- lexik_jwt_authentication.jwt_token_authenticator main:
pattern: ^/_api/
stateless: true
anonymous: true
# anonymous: lazy
provider: app_user_provider
# logout: ~
# json_login:
# check_path: /_api/authentication
# username_path: username
# password_path: password
# success_handler: lexik_jwt_authentication.handler.authentication_success
# failure_handler: lexik_jwt_authentication.handler.authentication_failure
guard:
authenticators:
- lexik_jwt_authentication.jwt_token_authenticator # 7-31
encoders:
# legacy:
# algorithm: sha256
# encode_as_base64: false
# iterations: 1 # use your user class name here
App\Entity\User:
# the new encoder, along with its options
algorithm: sha256 # 指定用户密码的编码算法
migrate_from:
- bcrypt # uses the "bcrypt" encoder with the default options
- legacy # uses the "legacy" encoder configured above # Easy way to control access for large sections of your site
# Note: Only the *first* access control that matches will be used
access_control:
# 无需登录的路由
- { path: /_api/pano_like, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: /_api/project/rand, roles: IS_AUTHENTICATED_ANONYMOUSLY }
# 登录注册相关
- { path: /_api/authentication, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: /_api/register, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: /_api/refresh, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: /_api/auth_code, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: /_api/reset_pass_auth_code, roles: IS_AUTHENTICATED_ANONYMOUSLY }
# api 文档页
- { path: ^/api$, roles: IS_AUTHENTICATED_ANONYMOUSLY }
# - { path: /, roles: IS_AUTHENTICATED_ANONYMOUSLY } # 需要控制权限的路由
- { path: ^/api/, roles: ROLE_USER }
- { path: ^/_api/, roles: ROLE_USER }
- { path: ^/admin, roles: ROLE_ADMIN } # 角色分层
role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: [ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]
^ROLE_CUSTOM_: ROLE_USER #自定义角色继承ROLE_USER


我这里使用的是symfony4.4,其他版本类似。

官方文档:安全性 (Symfony 4.4 Docs)

symfony框架安全组件(security)防火墙配置的更多相关文章

  1. Vue 框架-11-介绍src文件流程及根组件app+HBuilder 配置

    Vue 框架-11-介绍src文件流程及根组件app+HBuilder 配置 这是上一篇对目录简单介绍: 关于编辑器,可以使用轻量级的 Sublime Text 3,我使用的是 HBuilder, 但 ...

  2. Linux防火墙配置与管理(16)

    防火墙指的是一个由软件和硬件设备组合而成.在内部网和外部网之间.专用网与公共网之间的边界上构造的保护屏障.是一种获取安全性方法的形象说法,它是一种计算机硬件和软件的结合,使Internet与Intra ...

  3. Symfony 框架实战教程——第一天:创建项目(转)

    这个系列的实战博客真是太有用了,很多例子自己调试也是通的,不同于很多网上不同的实战例子...附上原文地址  https://www.chrisyue.com/symfony-in-action-day ...

  4. Security命名空间配置

    http://www.mossle.com/docs/springsecurity3/html/ns-config.html Security命名空间配置 2.1. 介绍 从Spring-2.0开始可 ...

  5. Spring mvc Security安全配置

    Spring Security笔记:自定义Login/Logout Filter.AuthenticationProvider.AuthenticationToken SPRING SECURITY ...

  6. 6. Samba服务和防火墙配置笔记

    Samba文件服务器 (一)简介 内网文件服务器 windows-windows 文件共享服务 网络邻居linux-linux NFS windows-linux Samba (二)端口 smbd: ...

  7. setup 命令中防火墙配置选项无法打开

    故障提示 1.1 如何让setup 命令中防火墙配置生效 1.1.1 CentOS系统找不到setup命令工具的解决方法 yum -y install setuptool #安装setup命令工具 y ...

  8. Spring Security 入门(1-2)Spring Security - 从 配置例子例子 开始我们的学习历程

    1.Spring Security 的配置文件 我们需要为 Spring Security 专门建立一个 Spring 的配置文件,该文件就专门用来作为 Spring Security 的配置. &l ...

  9. 迷你MVVM框架 avalonjs 组件编写指南

    avalon经过半年的宣传,已经有不少公司在使用avalon应用于它们内外网应用或移动项目,比较大牌的客户有百度,搜狐,金山,边缘,去哪儿--最近成为去哪儿的前端架构师后,掌握更多资源,可以随使抓个人 ...

  10. Django之REST_framework 框架基本组件使用

    快速实例 快速实例: 点击查看官方文档 阅读推荐:点击查看 序列化 创建一个序列化类 简单使用 开发我们的Web API的第一件事是为我们的Web API提供一种将代码片段实例序列化和反序列化为诸如j ...

随机推荐

  1. flutter设置导航栏顶部标题与组件Text和Center和Container详解

    无状态组件和有状态组件的介绍 StatelessWidget 是无状态组件,状态是不可以改变的 StatefulWidget 是有状态组件 持有的状态可能在 widge 生命周期中改变 Statele ...

  2. 鸿蒙页面开发 - 组件复用样式 @Styles

    这篇文章介绍一个装饰器 @Styles 他的主要作用是: 当多个组件都有相同的样式,如果每个组件单独设置,会造成大量重复的代码冗余.这时我们可以使用 @Styles 将这些相同样式封装成一个方法,供这 ...

  3. [阿里DIN] 从论文源码梳理深度学习几个概念

    [阿里DIN] 从论文源码梳理深度学习几个概念 目录 [阿里DIN] 从论文源码梳理深度学习几个概念 0x00 摘要 0x01 全连接层 1.1 全连接层作用 1.2 CNN 1.3 RNN 1.4 ...

  4. 正权图的 Dijkstra 最短路算法

    最短路径问题是图论中最经典且重要的应用问题之一.它的目标是找到一个图中从起点到终点的最短路径,即在所有可能的路径中,选择一条边权和最小的路径.该问题广泛存在于多个实际场景中,比如交通运输.通信网络.导 ...

  5. ABC245Ex题解

    前言 \(2024.11.21\) 联考第三题,本人由于太菜没有推出 \(m=p^x\) 的性质遂部分分跑路,作文以记之. 简要题意 对于一个长度为 \(n\),值域为 \([0,m-1]\) 的序列 ...

  6. 探究高空视频全景AR技术的实现原理

    1. 引言 笔者认为现阶段AR技术的应用是还是比较坑爹的,大都是噱头多但是实用的成分少,拿出来做做DEMO是可以,但是难以在实际的项目中落地产生实际的经济价值.一方面是很难在业务上难以找到合适的应用场 ...

  7. linux下配置ip为动态获取

    点击查看代码 在Linux系统中配置网络接口以动态获取IP地址,通常需要使用DHCP(Dynamic Host Configuration Protocol).大多数现代Linux发行版都默认支持这个 ...

  8. Avalanche公链深度解析:创新共识、亚秒级最终性与生态竞争力

    摘要:Avalanche定位为一个高性能.可扩展的Layer 1区块链平台,但它并不是一个新公链,其主网于2020年9月21日正式上线,有Ava Labs开发.Ava Labs成立于2018年,总部位 ...

  9. nuclei安装使用

    go环境安装 go 下载路径:https://golang.google.cn/dl/ 1.双击 go1.20.7.windows-amd64.msi 2.点击下一步 3.我同意,然后下一步. 4.选 ...

  10. SICK Ranger3源码分析——断线重连

    前言 本文可在https://paw5zx.github.io/SICK-Ranger3-source-code-analysis-01/中阅读,体验更加 简单分析一下SICK Ranger3源码中断 ...