2015-05-11 50 views
2

我的目標是讓除防火牆外的所有路由受保護的API除外。 我有防火牆的配置是這樣的:Symfony2 - FOSOauthServerBundle - 防火牆配置 - 路由白名單

security: 
    acl: 
     connection: default 

providers: 
    fos_userbundle: 
     id: fos_user.user_provider.username_email 

encoders: 
    FOS\UserBundle\Model\UserInterface: sha512 

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 
     anonymous: true 

    api: 
     pattern: ^/.* 
     fos_oauth: true 
     stateless: true 
     anonymous: false 

access_control: 
    - { path: ^/, methods: [GET], roles: [ IS_AUTHENTICATED_ANONYMOUSLY ]} 
    - { path: ^/doc, methods: [GET], roles: [ IS_AUTHENTICATED_ANONYMOUSLY ]} 
    - { path: ^/resque, methods: [GET], roles: [ IS_AUTHENTICATED_ANONYMOUSLY ]} 
    - { path: /monitor, methods: [GET], roles: [ IS_AUTHENTICATED_ANONYMOUSLY ]} 
    - { path: /users, methods: [POST], roles: [ IS_AUTHENTICATED_ANONYMOUSLY ]} 
    - { path: /users/me/registration/confirm, methods: [GET], roles: [ IS_AUTHENTICATED_ANONYMOUSLY ]} 
    - { path: /users/me/email/confirm, methods: [GET], roles: [ IS_AUTHENTICATED_ANONYMOUSLY ]} 
    - { path: /instants/.*, methods: [PUT], roles: [IS_AUTHENTICATED_ANONYMOUSLY ]} 
    - { path: ^/_profiler, roles: [IS_AUTHENTICATED_ANONYMOUSLY]} 
    - { path: ^/_wdt, roles: [IS_AUTHENTICATED_ANONYMOUSLY]} 
    - { path: ^/_configurator, roles: [IS_AUTHENTICATED_ANONYMOUSLY]} 
    - { path: /.*, roles: [ IS_AUTHENTICATED_FULLY ]} 

但路線/resque/monitor和其他人也不是沒有訪問令牌到達。 我在配置中做錯了什麼?或者不可能實現路由白名單?

+0

@Genar沒了,但我解決我的問題與其他的OAuth grant_type的整合(client_credentials )。我在API中沒有公共路由,但客戶端可以在沒有用戶身份驗證的情況下向某個端點發出請求。 –

+0

@AngeloGiuffredi我處於相同的情況,你是如何禁用一些端點/路線到client_credentials grant_type? – sh4

回答

0

我有同樣的問題,我通過實施另一個防火牆解決了它。沒有這道OAuth令牌不會被檢查。我把另一個正則表達式路由到模式中。 不要忘記把這種防火牆在您的API防火牆的前面,因爲你有正則表達式「匹配一切」

api_anonym_area: 
     pattern: (^/api/users/forgotten-password/.*) 
     methods: [POST] 
     security: false