问题标签 [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.
php - Symfony 双向认证
我正在开发一个在远程服务器上进行身份验证的 symfony 2.8 应用程序。身份验证通过表单或 api 密钥 (simple_preauth) 传递。成功验证后,会话密钥会保存在 cookie 中,以便我的 simple_preauth 验证器(无状态设置为 true)在每个请求上检查它。simple_preauth 身份验证器允许做两件事:通过在 get 参数中传递的秘密 api 密钥对用户进行身份验证,并检查当前会话是否在远程服务器上过期。只有经过身份验证的用户才能做任何事情。所以有我的 security.yml 文件:
问题:
- security.yml 文件中的设置“stateless: true”会在登录后禁用 target_path 重定向(github 上的 Exception Listener)。事实上,只有 simple_preauth 需要“stateless: true”,而 simple_form 不需要。也许有一种正确的方法可以将防火墙分成两个防火墙,仍然保持通过表单和 api 密钥进行身份验证的能力?
- 也许有一种更正确的方法来组织访问控制,以便只有经过身份验证的用户才能访问页面?
php - Symfony 3安全登录后有一个无限重定向
我有一个自定义 symfony 安全登录的问题,灵感来自 Symfony 食谱的教程“如何构建传统登录表单”。一切正常,直到我从 /login 路由登录。然后我想要重定向到的每条路线都会导致无限循环。也许我错过了什么?
//security.yml 安全性:
//路由.yml
//SecurityController.php
//login.twig.html
php - 您请求了一个不存在的服务“security.context”
我创建了服务,但它不起作用
这是我的课
Container.php 第 268 行中的 ServiceNotFoundException:您请求了一个不存在的服务“security.context”。
php - 如何让刚刚注册的 SimpleUser 登录到 Silex/Symfony 的安全区域?
我正在寻求使用 SimpleUser for Silex 的帮助。我的 composer.json 在需要时可用。
在 SimpleUser 中,我们可以访问一个页面以允许用户注册自己(并可能确认他们的电子邮件)。当没有确认电子邮件时,这些用户在完成注册表后会自动登录(通过RegisterAction
在线89
,调用loginAsUser
在线114
)。
我假设在登录后,用户可以访问我的安全区域,即使尚未授予大多数页面/功能的权限(稍后将由管理员手动完成)。
实际所做的是,在注册后,当我调用任何 url 时,我得到一个302 redirection
到根 / 页面(如果没有授予使用页面的权利,这由我的控制器完成),然后我得到另一个302 redirection
(完成“自动”)到我的登录网址。我在日志中看到抛出异常:
这里的重点是登录页面知道用户,因为它显示姓名、电子邮件等。所以用户肯定是登录的。
总而言之,我的问题是第四步:
- 以匿名身份访问页面,
- 重定向到登录页面,
- 注册为用户,
- 尝试访问(手动或使用链接)到任何页面重定向到 root(这是预期的)和 root 重定向到登录表单(不是预期的),
- 看到您已登录登录页面。
我的想法,经过几个小时的挖掘代码,发现了两个有趣的点:
- 抛出的异常是合法的:实际上没有 token_storage。在构造函数之后,我发现它应该在注册 my
SecurityServiceProvider
, line时被填充314
。从这里我想我的防火墙设置错误...... $app['security.token_storage']
每当我使用完全正常工作和注册的用户或新注册的用户访问页面时,我都尝试调试并观察.- 我查看了
loginAsUser
函数,发现有些奇怪。令牌从当前值更改为用于对用户进行身份验证的新令牌。、 和的值从authenticated
、user
和key
更改为、true
和"anon."
的实例(属性从 更改为)。会不会是从这里来的?"public"
false
SimpleUser\\User
"public"
key
providerKey
编辑 1:
在与 Symfony 朋友相处一段时间后,我发现在注册新用户时(因此在公共防火墙中),loginAsUser
(参见上面列表中的最后一个要点)考虑到这个防火墙进行令牌切换。更改公共防火墙名称时,它确实会更改$currentToken->key
and $token->providerKey
。我认为这与一个误解有关:我们无法在属于另一个防火墙的页面上登录防火墙。那正确吗 ?
那么,你知道我做错了什么吗?
这是我的代码:
作曲家.json:
经典控制器代码:
我的防火墙:
还有我的回家路线:
如果您需要更多信息,请告诉我。
我知道我应该将权限管理到 a$app['security.access_rules']
中,这是接下来的改进之一。虽然它不应该导致这个问题。
谢谢你的帮助 !
php - 为什么我不能通过编程登录symfony?
我试图通过编程登录 symfony,但是当重定向到新路由时,用户返回到 anon。用户。
安全.yml
登录动作
问题:用户登录但当重定向到路由管理员再次返回以用户匿名登录。
symfony - 我如何访问服务中的选民方法
我在一个 symfony 2.8 项目中。另一位开发人员编写了一个 Voter 来检查用户是否具有特定任务的权限。我已经在控制器中使用此功能没有问题,但现在我正在编写一个服务来获取动态菜单,但我不知道如何访问该方法isGranted
:
错误:试图调用类的名为“isGranted”的未定义方法。
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 令牌)
(这是一个内网,没有“主页”,当您打开需要登录的站点时)
为什么这个?
谢谢
security - 生产中的 Symfony 安全注销 404
正如标题所说,我在 Symfony 2.8 版的注销系统上遇到了问题。
我遵循了文档,它在开发环境中工作。但在生产中,我得到了一个很棒的结果:
未找到
在此服务器上未找到请求的 URL /logout。
这是安全配置:
和routing.yml:
我清空了dev和prod上的缓存,但什么也没发生。debug:router命令很好地显示了注销路由。并且日志是空的,因为它是 404 错误。
谢谢你的帮助。
symfony - 动态更改 Symfony 投票策略
使用 SymfonyVoters
系统很容易为 Web 应用程序建立和运行一个好的 ACL。但是,您必须在一开始就决定要使用哪种策略。
Symfony 支持 3 种策略:affirmative
和consensus
(unanimous
参见他们的文档)
affirmative
(默认):一旦有一个投票者授予访问权限,就会授予访问权限;
consensus
:如果允许访问的选民多于拒绝访问的选民,则授予访问权限;
unanimous
:这仅在所有选民授予访问权限后才授予访问权限。
我目前正在使用该affirmative
策略。在一种特殊情况下(到目前为止,将来可能还会有更多),我需要使用该unanimous
策略。
有没有办法做到这一点,还是我只需要在那里建立一个自定义检查系统(复制所有相关选民的代码)?
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
之前显式检索,我每次都会得到一个新实例,因此它会起作用。
但是,它的行为完全相同:(。
我错过了什么?