问题标签 [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 投票
0 回答
255 浏览

php - Symfony 双向认证

我正在开发一个在远程服务器上进行身份验证的 symfony 2.8 应用程序。身份验证通过表单或 api 密钥 (simple_preauth) 传递。成功验证后,会话密钥会保存在 cookie 中,以便我的 simple_preauth 验证器(无状态设置为 true)在每个请求上检查它。simple_preauth 身份验证器允许做两件事:通过在 get 参数中传递的秘密 api 密钥对用户进行身份验证,并检查当前会话是否在远程服务器上过期。只有经过身份验证的用户才能做任何事情。所以有我的 security.yml 文件:

问题

  1. security.yml 文件中的设置“stateless: true”会在登录后禁用 target_path 重定向(github 上的 Exception Listener)。事实上,只有 simple_preauth 需要“stateless: true”,而 simple_form 不需要。也许有一种正确的方法可以将防火墙分成两个防火墙,仍然保持通过表单和 api 密钥进行身份验证的能力?
  2. 也许有一种更正确的方法来组织访问控制,以便只有经过身份验证的用户才能访问页面?
0 投票
5 回答
2841 浏览

php - Symfony 3安全登录后有一个无限重定向

我有一个自定义 symfony 安全登录的问题,灵感来自 Symfony 食谱的教程“如何构建传统登录表单”。一切正常,直到我从 /login 路由登录。然后我想要重定向到的每条路线都会导致无限循环。也许我错过了什么?

//security.yml 安全性:

//路由.yml

//SecurityController.php

//login.twig.html

0 投票
2 回答
17955 浏览

php - 您请求了一个不存在的服务“security.context”

我创建了服务,但它不起作用

这是我的课

Container.php 第 268 行中的 ServiceNotFoundException:您请求了一个不存在的服务“security.context”。

0 投票
1 回答
489 浏览

php - 如何让刚刚注册的 SimpleUser 登录到 Silex/Symfony 的安全区域?

我正在寻求使用 SimpleUser for Silex 的帮助。我的 composer.json 在需要时可用。

在 SimpleUser 中,我们可以访问一个页面以允许用户注册自己(并可能确认他们的电子邮件)。当没有确认电子邮件时,这些用户在完成注册表后会自动登录(通过RegisterAction在线89,调用loginAsUser在线114)。

我假设在登录后,用户可以访问我的安全区域,即使尚未授予大多数页面/功能的权限(稍后将由管理员手动完成)。

实际所做的是,在注册后,当我调用任何 url 时,我得到一个302 redirection到根 / 页面(如果没有授予使用页面的权利,这由我的控制器完成),然后我得到另一个302 redirection(完成“自动”)到我的登录网址。我在日志中看到抛出异常:

这里的重点是登录页面知道用户,因为它显示姓名、电子邮件等。所以用户肯定是登录的。

总而言之,我的问题是第四步:

  1. 以匿名身份访问页面,
  2. 重定向到登录页面,
  3. 注册为用户,
  4. 尝试访问(手动或使用链接)到任何页面重定向到 root(这是预期的)和 root 重定向到登录表单(不是预期的),
  5. 看到您已登录登录页面。

我的想法,经过几个小时的挖掘代码,发现了两个有趣的点:

  • 抛出的异常是合法的:实际上没有 token_storage。在构造函数之后,我发现它应该在注册 my SecurityServiceProvider, line时被填充314。从这里我想我的防火墙设置错误......
  • $app['security.token_storage']每当我使用完全正常工作和注册的用户或新注册的用户访问页面时,我都尝试调试并观察.
  • 我查看了loginAsUser函数,发现有些奇怪。令牌从当前值更改为用于对用户进行身份验证的新令牌。、 和的值从authenticateduserkey更改为、true"anon."的实例(属性从 更改为)。会不会是从这里来的?"public"falseSimpleUser\\User"public"keyproviderKey

编辑 1: 在与 Symfony 朋友相处一段时间后,我发现在注册新用户时(因此在公共防火墙中),loginAsUser(参见上面列表中的最后一个要点)考虑到这个防火墙进行令牌切换。更改公共防火墙名称时,它确实会更改$currentToken->keyand $token->providerKey。我认为这与一个误解有关:我们无法在属于另一个防火墙的页面上登录防火墙。那正确吗 ?

那么,你知道我做错了什么吗?

这是我的代码:

作曲家.json:

经典控制器代码:

我的防火墙:

还有我的回家路线:

如果您需要更多信息,请告诉我。

我知道我应该将权限管理到 a$app['security.access_rules']中,这是接下来的改进之一。虽然它不应该导致这个问题。

谢谢你的帮助 !

0 投票
2 回答
320 浏览

php - 为什么我不能通过编程登录symfony?

我试图通过编程登录 symfony,但是当重定向到新路由时,用户返回到 anon。用户。

安全.yml

登录动作

问题:用户登录但当重定向到路由管理员再次返回以用户匿名登录。

0 投票
2 回答
2144 浏览

symfony - 我如何访问服务中的选民方法

我在一个 symfony 2.8 项目中。另一位开发人员编写了一个 Voter 来检查用户是否具有特定任务的权限。我已经在控制器中使用此功能没有问题,但现在我正在编写一个服务来获取动态菜单,但我不知道如何访问该方法isGranted

错误:试图调用类的名为“isGranted”的未定义方法。

0 投票
2 回答
2156 浏览

php - Symfony + FOSUserBundle 无法登录

我正在使用带有 FOSUserBundle 的 Symfony 3.1。

我在 Symfony 中阅读了文档并集成了 FOS,好吧,注册似乎运行良好并将数据保存到数据库,但是,如果我尝试登录,我会再次以匿名用户身份重定向到登录页面。

我检查了 Symfony Profiler,我可以看到当它被称为路径 /login_check(在分析器中)时,用户结果是经过身份验证的,但是在 /login_check 阶段之后,当我被重定向时,用户是匿名的......

--

/login_check 来自探查器:

适当的价值

角色 [ROLE_USER]

继承的角色 无

令牌类 Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken

--

会话似乎存在 (dump(app.session)) 不为空,但没有存储用户的数据。

那是我的security.yml:

安全:

(由于注册问题,我禁用了 csrf 令牌)

(这是一个内网,没有“主页”,当您打开需要登录的站点时)

为什么这个?

谢谢

0 投票
2 回答
410 浏览

security - 生产中的 Symfony 安全注销 404

正如标题所说,我在 Symfony 2.8 版的注销系统上遇到了问题。

我遵循了文档,它在开发环境中工作。但在生产中,我得到了一个很棒的结果:

未找到

在此服务器上未找到请求的 URL /logout。

这是安全配置:

和routing.yml:

我清空了devprod上的缓存,但什么也没发生。debug:router命令很好地显示了注销路由。并且日志是空的,因为它是 404 错误。

谢谢你的帮助。

0 投票
1 回答
358 浏览

symfony - 动态更改 Symfony 投票策略

使用 SymfonyVoters系统很容易为 Web 应用程序建立和运行一个好的 ACL。但是,您必须在一开始就决定要使用哪种策略。

Symfony 支持 3 种策略:affirmativeconsensusunanimous参见他们的文档

affirmative(默认):一旦有一个投票者授予访问权限,就会授予访问权限;
consensus:如果允许访问的选民多于拒绝访问的选民,则授予访问权限;
unanimous:这仅在所有选民授予访问权限后才授予访问权限。

我目前正在使用该affirmative策略。在一种特殊情况下(到目前为止,将来可能还会有更多),我需要使用该unanimous策略。

有没有办法做到这一点,还是我只需要在那里建立一个自定义检查系统(复制所有相关选民的代码)?

0 投票
0 回答
246 浏览

symfony - 为什么 TokenStorage 在 Behat 场景之间表现不正确?

在我们的 Symfony 应用程序中,我们有处理身份验证的自定义代码。它基于phpleague/oauth2-server之上。

我们有 2 种类型的身份验证,最终都调用TokenStorage::setToken().

这一切都完美无缺。

现在我们决定在我们的包中添加一些 Behat 测试:

(为了不暴露特定业务的术语,我更改了场景的实际措辞)

为了测试这些Then步骤,我需要访问TokenStorage我的上下文中的 ,因为我基本上想测试用户是否具有正确的安全角色:

我的上下文如下所示:

会发生什么:

  • 如果我只运行第一个场景,它可以正常工作
  • 如果我只运行第二个场景,它可以正常工作
  • 如果我同时运行它们,那么在第二种情况下我会收到错误Call to a member function getRoles() on a non-object

为什么会这样?我怎样才能让它正常工作?

我的版本是:

  • 行为/行为:3.1.0
  • 贝哈特/小黄瓜:4.4.1
  • behat/symfony2-扩展:2.1.1
  • symfony/symfony:2.6.13

我尝试的一种解决方案是让我的上下文实现Behat\Symfony2Extension\Context\KernelAwareContext接口,然后我这样做:

我的想法是,通过在每个场景TokenStorage 之前显式检索,我每次都会得到一个新实例,因此它会起作用。

但是,它的行为完全相同:(。

我错过了什么?