Security Symfony 2-使用HTTP身份验证对话框隐藏整个网站
我正在使用Symfony 2构建一个网站 这项工作正在进行中,因此我不希望用户或搜索引擎访问它,但我的客户希望看到我的进展。我认为一个简单的解决方案是使用Symfony 2安全功能提供的机制,通过HTTP身份验证来保护整个网站 我正在使用FOSUserBundle,因为该网站将有需要注册和登录的用户 这是我的security.yml,非常有效:Security Symfony 2-使用HTTP身份验证对话框隐藏整个网站,security,symfony,firewall,Security,Symfony,Firewall,我正在使用Symfony 2构建一个网站 这项工作正在进行中,因此我不希望用户或搜索引擎访问它,但我的客户希望看到我的进展。我认为一个简单的解决方案是使用Symfony 2安全功能提供的机制,通过HTTP身份验证来保护整个网站 我正在使用FOSUserBundle,因为该网站将有需要注册和登录的用户 这是我的security.yml,非常有效: security: providers: fos_userbundle: id: fos_user.us
security:
providers:
fos_userbundle:
id: fos_user.user_manager
encoders:
"FOS\UserBundle\Model\UserInterface": sha512
firewalls:
main:
pattern: ^/
form_login:
provider: fos_userbundle
csrf_provider: form.csrf_provider
logout: true
anonymous: true
access_control:
- { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/admin/, role: ROLE_ADMIN }
- { path: ^/account, role: IS_AUTHENTICATED_FULLY }
role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: ROLE_ADMIN
因此,我试图在其上添加其他内容,以允许网站受到HTTP身份验证的保护。
我将文件更改为:
security:
providers:
fos_userbundle:
id: fos_user.user_manager
whole_website_provider:
users:
ryan: { password: ryanpass, roles: 'ROLE_USER' }
encoders:
"FOS\UserBundle\Model\UserInterface": sha512
firewalls:
main:
pattern: ^/
form_login:
provider: fos_userbundle
csrf_provider: form.csrf_provider
logout: true
anonymous: true
whole_website:
pattern: ^/
anonymous: ~
http_basic:
realm: "Secured Demo Area"
access_control:
- { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/admin/, role: ROLE_ADMIN }
- { path: ^/account, role: IS_AUTHENTICATED_FULLY }
- { path: ^/, role: ROLE_USER }
role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: ROLE_ADMIN
基本上,我添加了整个网站、整个网站防火墙和额外的访问控制。
但这不起作用:当我访问网站时,我会被重定向到登录表单,就是这样
你知道我能不能做,怎么做吗
注意:我不希望使用任何Apache功能。在我看来,您需要的不是使用HTTP身份验证来管理用户,而是使用HTTP身份验证来限制对站点的访问。不要为此使用Symfony2安全性 保持symfony2应用程序的安全性,因为它将处于生产模式,并使用apache.htaccess限制对站点的访问
文档在这里。您只需在web/.htaccess中添加一些指令,并按照文档中的说明创建一个用户/密码文件…我在Symfony2中的解决方案,使用symfony的基本防火墙而不使用FOSUserBundle:
# app/config/security.yml
security:
firewalls:
secured_area:
pattern: ^/
anonymous: ~
form_login:
login_path: login
check_path: login_check
access_control:
- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/admin, roles: ROLE_ADMIN }
- { path: ^/, roles: ROLE_USER }
providers:
in_memory:
memory:
users:
redattore: { password: 'somePasswordHere', roles: 'ROLE_USER' }
admin: { password: 'somePasswordHere', roles: 'ROLE_ADMIN' }
encoders:
Symfony\Component\Security\Core\User\User: plaintext
role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]
它对我非常有效。这是一个非常基本的配置-没有散列密码,没有数据库提供程序:节,没有https连接,所有内容在整个互联网上都是纯文本,没有注销内容和其他漂亮的功能。
我希望它能帮助你。
致以亲切的问候谢谢佩奇。我仍然希望在应用程序级别上完成所有工作,而不是求助于Apache。我决定采纳你的建议,因为我的方式似乎并不容易,毕竟,实现其他开发人员所期望的东西是很好的。我认为如果你只需要确保访问安全,而不需要识别用户,这种方式是很好的。此外,一旦他们通过了这个临时安全措施,他们就可以看到未来的应用程序,使用相同的登录过程。如果你把整个_网站的防火墙放在第一位,会发生什么?别忘了清除缓存。@gilden:至少显示了身份验证框,但我找不到正确的身份验证方法。很抱歉,我没有时间给出正确的建议,但我猜您还需要显式设置整个_网站的用户提供程序,否则Sf2将使用第一个。我想,佩西的建议也很管用,但由于有点强迫症,我会采取困难但更优雅的解决方案: