5

Web サイトの構築に Symfony 2 を使用しています。

作業は進行中です (したがって、ユーザーや検索エンジンにアクセスしてほしくありません) が、クライアントは私の進行状況を確認したいと考えています。Symfony 2 のセキュリティ機能によって提供されるメカニズムを使用して、HTTP 認証で Web サイト全体を保護するのが簡単な解決策だと考えていました。

ウェブサイトには登録とログインが必要なユーザーがいるため、FOSUserBundle を使用しています。

これは私の security.yml です。

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

したがって、Web サイトを 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

基本的に、whole_website_providerプロバイダー、whole_websiteファイアウォール、およびエクストラを追加しましたaccess_control
しかし、それはうまくいきませんでした: Web サイトにアクセスすると、ログイン フォームにリダイレクトされます。それだけです。

私がそれを行うことができるかどうか、またどのように行うかについて何か考えがありますか?

注意: Apache の機能を使用したくないと思います。

4

2 に答える 2

4

私の意見では、必要なのは HTTP 認証でユーザーを管理することではなく、HTTP 認証でサイトへのアクセスを制限することです。そのために Symfony2 セキュリティを使用しないでください。

symfony2 アプリのセキュリティは本番モードのままにしておき、apache .htaccess を使用してサイトへのアクセスを制限します。

ドキュメントはこちらhttp://httpd.apache.org/docs/2.2/howto/auth.htmlです。ドキュメントで説明されているように、web/.htaccessにいくつかのディレクティブを追加し、ユーザー/パスワードファイルを作成するだけです...

于 2012-05-07T12:21:04.817 に答える
0

symfony の基本的なファイアウォールを使用する Symfony2 の私のソリューション (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]

それは私にとって完璧に機能します。これは非常に基本的な構成です。パスワードのハッシュ化、データベース プロバイダー ("providers:" セクション)、https 接続 (インターネット全体ですべてがプレーン テキストで送信されます) なし、ログアウト機能やその他の便利な機能はありません。お役に立てば幸いです。敬具

于 2014-01-18T15:51:29.653 に答える