簡體   English   中英

Symfony2防火牆Web和API身份驗證

[英]Symfony2 firewall Web & API authentication

我正在嘗試建立一個項目,在這里我可以通過APIWeb界面(登錄表單)對用戶進行身份驗證。 到目前為止,我只能管理一種登錄表單,這是主要的Web登錄表單。 我需要通過API對其進行身份驗證,並調出帶有消息的自定義oauth表單,以通知用戶有關授權的信息,基本上只是一條自定義消息。 像facebook這樣的東西可能會。

到目前為止,在Symfony2安全頁面上,我找不到所需的幫助,也找不到博客。 至少不是一個對我有用的人。

所以理想的情況是

  1. http://url.com/用於web
  2. http://url.com/api for api

我正在為我的用戶使用FOS用戶捆綁包,為oauth身份驗證使用FOS OAuth捆綁包,為REST API使用FOSRestBundle。

本oauth教程中所述 ,這是我要實現的確切方案。

當我問像URL http://url.com/oauth/v2/token?client_id=24_2qxtvmjv99eso8wg8sowc8c04o488og8gs8wo0osocks0wkcw0&client_secret=33ghqa2w202sooscwogw0kwwwg0gc00k8sgkkw0cgco4cg08s0&grant_type=client_credentials它重定向我到登錄頁面。 據我了解,我的access_control是錯誤的。

這是我的security.yml文件:

security:
encoders:
    FOS\UserBundle\Model\UserInterface: bcrypt

role_hierarchy:
    ROLE_USER:        [ROLE_CUSTOMER_RSS, ROLE_CUSTOMER_ASS]
    ROLE_AGENT:       ROLE_USER
    ROLE_ADMIN:       ROLE_AGENT
    ROLE_SUPER_ADMIN: ROLE_ADMIN

providers:
    fos_userbundle:
        id: fos_user.user_provider.username

firewalls:

    oauth_token:
        pattern:    ^/oauth/v2/token
        security:   false

    oauth_authorize:
        pattern:    ^/oauth/v2/auth
        form_login:
            provider: fos_userbundle
            check_path: /oauth/v2/auth_login_check
            login_path: /oauth/v2/auth_login

    api:
        pattern:    ^/api
        fos_oauth:  true
        stateless:  true
        anonymous:  false # can be omitted as its default value

   ui_login:
            pattern: ^/
            form_login:
                login_path: fos_user_security_login
                check_path: fos_user_security_check
                provider: fos_userbundle
                csrf_provider: form.csrf_provider
                default_target_path: /
            logout:       true
            anonymous:    true

    assets:
        pattern:  ^/(css|images|js)/
        security: false

    dev:
        pattern:  ^/(_(profiler|wdt|configurator|error))/
        security: false

access_control:
    - { path: ^/oauth/v2/auth_login, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/logout, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }

    - { path: ^/, role: [ROLE_USER] }

我知道我在這里錯過了很多東西。 請幫忙。

防火牆的順序很重要。 現在,您配置方式的第一個網址“ ^ /”的“ catchall”防火牆正在捕獲所有請求,因此其他防火牆均未激活。 應該首先放置更具體的防火牆,然后再放置次具體的防火牆。 因此, ui_login防火牆應該是最后一個定義的防火牆

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM