问题标签 [symfony-security]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
81 浏览

symfony - 使用 FOSUserBundle 的页面资源问题

我希望仅在用户登录时启用整个页面访问(FOS 用户登录页面除外)

这就是我设置访问控制的方式:

但问题是它现在阻止了我所有的脚本。CSS和JS不可用,所以登录页面没有样式!如果我删除:

从访问控制一切正常,登录页面的样式。关于如何将整个页面置于“锁定”(登录页面除外)但仍显示样式(CSS)的任何帮助?

0 投票
1 回答
580 浏览

symfony - Symfony 2 与多个提供商、多个防火墙和多个主机的安全问题

我在设置 Symfony 2 的安全性时遇到了一些问题。我目前在我的 security.yml 中有这个

如您所见,我有 2 个不同的提供商、2 个不同的防火墙和 2 个不同的主机。那是因为我需要记录 app.example.dev 上的用户表中的用户和 admin.example.dev 上的 AdminUsers 表中的用户。

这就是我的管理员routing.yml 中的内容:

这就是我在我的应用程序routing.yml中所拥有的

现在它的设置方式在管理端一切正常。在应用程序端,注销不起作用,它说:

它们似乎以类似的方式设置,但解决方案是让我在应用程序中设置一个实际的控制器。注销路由,添加一个带有实际注销和重定向代码的注销操作以使其正常工作。这告诉我出了点问题。知道那是什么吗?

同样登录起初也不起作用,因为我在 security.yml 文件的 access_control 部分中的 2 个条目被颠倒了,直到我再次阅读文档并且我明白那里的路径需要从特定到一般列出。

所以我的第二个问题是关于这个:有没有办法将 access_control 条目绑定到某个防火墙或至少绑定到主机?

编辑:虽然我得到了答案,见下文,但我仍然想了解我的最后一个问题,即上面的 2 段,是否有效。

谢谢你。

0 投票
1 回答
321 浏览

symfony - Symfony2:无法使用两个用户提供程序通过两个防火墙成功登录

我正在建立一个网站,我想为前端和后端使用单独的防火墙和身份验证系统。所以我security.yml的配置如下。我在早期开发阶段使用 in_memory 用户提供程序。

我省略了后端部分,因为它无关紧要。当省略的部分被注释掉时,问题仍然存在。

问题是前端身份验证不适用于上述配置。这是我所做的:

  1. 访问http://example.com/login
  2. 输入凭证(user:12345),点击登录
  3. http://example.com/login_check对用户进行身份验证
  4. 身份验证服务将用户重定向回http://example.com/。没有错误被抛出。事实上,当我打开 debug_redirects 选项时,它清楚地表明“用户”在重定向页面上通过了身份验证。

预期行为:安全令牌应显示我在重定向后以“用户”身份登录并返回索引页面。

实际行为:安全令牌在重定向后仍然显示“匿名”登录并返回索引页面。

但是使用几乎相同的设置(路径和路由名称不同),后端部分可以正常工作。

经过一番调查,我发现原因是用户提供程序当前的编写方式。请注意,frontend_in_memory部分位于用于后端身份验证的backend_in_memory下方。所以我为前端防火墙明确指定了frontend_in_memory提供程序。它的工作原理 - 我必须在前端登录页面中使用“用户:12345”登录。使用“admin”登录将不起作用。所以它必须使用正确的用户提供程序。但我怀疑框架无法正确更新安全令牌,因为它仍在从第一个用户提供程序(即backend_in_memory )搜索“用户”帐户。事实上,我可以通过以下任一更改使上述配置工作:

  1. 将“用户”登录添加到backend_in_memory提供者的用户列表(密码不必相同),或
  2. 将frontend_in_memorybackend_in_memory交换,以便frontend_in_memory成为第一个用户提供者。

当然,它们不是解决这个问题的正确方法。将“用户”帐户添加到后端根本没有意义;交换两个用户提供者的顺序修复了前端但破坏了后端。

我想知道出了什么问题以及如何解决这个问题。谢谢!

0 投票
1 回答
1037 浏览

symfony - FOSUserBundle access control for admin section allows anonymous users

I'm trying to make the admin section only accessible for admin users using FOSUserBundle.

However if I go to the admin url (www.foo.local/app_dev.php/admin) without authentication, it allows me access.

In the Symfony debug toolbar it shows Logged in as anon.

I have configured the FOSUserBundle following the official documentation

Here is the security.yml config:

I don't know why it doesn't ask for the ROLE_ADMIN in order to allow access to the admin section, any ideas?

0 投票
1 回答
154 浏览

security - symfony2 FOSUserBundle 将角色与用户分离

我有一个用户可以链接到几家公司的应用程序。与公司的多对多关系是一个称为 Associate 的杰出实体。

我想为这个 Associate 实体提供与我的 FOSUserBundle User 实体完全相同的角色功能。重要提示:如果用户拥有一家公司的 role_manager,则不应授予该用户访问他所属的另一家公司的特定功能的权限。

有没有一种干净的方法可以做到这一点?例如,我想检查 $this->getUser->getAssociate->hasRole('ROLE_MANAGER') 是否为真。

如果我给我的实体 Associate 提供一个角色数组怎么办?我读过它不够安全?为什么?如果无论如何我的用户必须通过 FOS 安全登录检查,有人能做些什么来破坏这种安全性?

我发现一篇文章建议使用选民。但是我不想过滤路由,我真的想根据用户和公司之间的链接检查条件,所以如果投票者是解决方案,我将如何使用它?

编辑:如果存在不涉及角色或具有不同逻辑的更好解决方案,我有兴趣了解它!

0 投票
1 回答
1794 浏览

php - symfony2 在 voter 中调用 is_granted:如何避免无限循环?

我已经建立了一个选民,我需要在其中调用 is_granted 用户。

在我的选民中注入 security.authorization_checker 服务时,我收到以下错误

CheckCircularReferencesPass.php 第 69 行中的 ServiceCircularReferenceException:检测到服务“manager_voter”的循环引用,路径:“manager_voter -> security.authorization_checker -> security.access.decision_manager -> manager_voter”。

除了注入整个容器之外,没有其他选择吗?这是正常的吗?

编辑:

我正在从控制器呼叫选民:

在这个选民中,我需要验证用户的角色:

这当然会导致循环。如何不得到那个循环?如果我没记错的话,对用户调用 $user->getRoles 不会考虑角色层次结构。

0 投票
0 回答
94 浏览

php - Symfony - 选民依赖冲突

我有一个问题,自过去 3 天以来我一直在努力解决问题(谷歌/stackoverflow 的研究没有给出太多结果)。

我目前正在维护由另一个开发人员开发的应用程序(原来的开发人员离开了)。该应用程序在 Symfony 2.6 中。在其中,有一个通过 Voter 的概念处理 de access 的逻辑。应用程序逻辑如下: URL 包含客户(应用程序)名称。例如,让我们将客户命名为 TEST。该 url 将是:myapplication.com/Test 访问此 URL 时,有一个 EventListner(连接 onKernelRequest,31)获取请求并将客户附加到路由器上下文。这里:

这基本上允许我们通过传递参数来加载我们的提供者服务

这样做的原因是因为我们的应用程序有它自己的数据库(默认)并且每个客户都有它自己的(因为它们是由第三方 ETL 生成的,我们只能控制这些数据库的部分)。

现在,服务中的选民定义取决于这些提供者之一。我们基本上从客户的数据库中获取可能的权限列表(地图)(每个客户都会改变)。不幸的是,此刻,整个事情都崩溃了。我收到“找不到名为...的映射文件”错误。他试图从默认映射文件而不是客户端映射文件夹中获取文件。

我已经“破解”了 appdebugProjectContainer 并添加了一个 print_r()|die 来完全显示 requestStack,它看起来完全是空的。(所以请求甚至根本没有预处理)。有什么我不明白的吗?

0 投票
1 回答
2658 浏览

symfony - Symfony2 自定义选民:无法从选民内部访问 getDoctrine

我正在尝试实现自定义选民。

从控制器我这样称呼它:

第一行正确检索项目对象(我检查了转储)。

问题发生在选民内部

我收到以下错误

尝试在类“AppBundle\Security\Authorization\Voter\ProjectVoter”上调用方法“getDoctrine”。

我知道控制器扩展了控制器,这就是为什么我可以在那里使用“getDoctrine”。如何从选民内部访问我的数据库?

0 投票
1 回答
5223 浏览

php - 警告:get_class() 期望参数 1 是对象,给定字符串

我正在使用 symfony 投票来处理我网站上的用户访问。当用户未通过身份验证时,我收到错误:

当用户访问调用选民的页面时。引发问题的选民中的代码是:

当对象 = 'anon.' 这是取自 symfony 网站的常规代码。我当然可以修改此代码以检查对象是否为对象,但我想知道这是否正常?我本来希望选民不会被非对象召集。

编辑: SuportsClass 和 SupportsAttribute 也是默认的:

0 投票
1 回答
331 浏览

php - 在 security.yml 中获取当前 url

在我的要求中,用户会收到一封带有 url 的电子邮件,一旦他单击,用户将通过身份验证过程导航到该 url。

因此,要将用户重定向到单击的 url,我使用的是此处提到的方法(重定向时传递参数),我打算将重定向 url 作为参数传递,例如

login_path: %accounts_host%/signin?redirect=%need_current_url_here%

security.yml和捕获中,$url=$_GET['redirect'];并相应地提供重定向。

我的查询是如何从 中访问当前 url,security.yml以便将其附加到login_path.

我对此很陌生,非常感谢任何示例/文档。:)

附言

身份验证是在另一个 symonfy2 应用程序中完成的,此时我不能使用referer命令,因为它将为空。这就是为什么我试图将重定向 url 作为参数传递。:)