簡體   English   中英

復雜的防火牆配置-Symfony2安全性

[英]Complex firewall configuration - Symfony2 security

情況如下:

我目前有兩個現有的防火牆-即mainadmin 我需要以某種方式為購物區域添加第三個防火牆。

我的商店基本上有以下步驟:

Select subscription -> user creation/login -> Capture billing information -> Review purchase -> Capture payment

新的要求是,如果用戶尚未登錄,我需要捕獲用戶信息和賬單地址, 而不是將其存儲在用戶存儲庫中 -客戶的論點是,這將停止將電子郵件地址鎖定到可能並沒有遍及整個購買流程,因此,如果用戶決定繼續使用該電子郵件地址,則將來無法使用該電子郵件地址。

這是我想到的身份驗證流程:

  • 我創建一個名為shop的新防火牆。
  • 當用戶未登錄時,我將其重定向到shop/account/create 此步驟將在系統中創建一個新訂單,標記為initiated 該訂單將包含提供的用戶信息以及會話ID。 沒有創建實際的用戶帳戶。
  • 定制身份驗證提供程序將檢查會話ID,並查找綁定到該會話ID的現有已initiated訂單,並根據該訂單內的用戶信息構造一個已認證令牌和一個模擬用戶實體。
  • 捕獲付款后,系統將在數據存儲區中創建一個新用戶,並購買相應的訂閱。

我已經為定制身份驗證提供程序制作了原型,這是我的security.yml

firewalls:
    main:
        pattern: ^/
          form_login:
              check_path: /user/login_check
              provider: fos_userbundle
              csrf_provider: form.csrf_provider
              default_target_path: /user/home
          logout:
              invalidate_session: false
              path: /user/logout
              target: /
     admin:
          pattern: ^/admin
          form_login:
              login_path: /admin/login
              check_path: /admin/login_check
              provider: app_adminbundle
              csrf_provider: form.csrf_provider
              default_target_path: /admin
          logout:
              invalidate_session: false
              path: /admin/logout
              target: /admin/login
     shop:
         pattern: ^/shop
         shop_auth: true

shop_auth是我的自定義身份驗證提供程序。 (我在這里提出了實現: https : //gist.github.com/bezhermoso/9305705

我的問題是,我不知道如何配置防火牆,以便如果用戶已經登錄到main防火牆中,那么我的商店應該簡單地允許他進入,而不必對照現有訂單檢查其會話ID並只需創建一個新的一。

如何配置防火牆來做到這一點?

所以我看錯了方向...

我能夠在朋友的幫助下實施解決方案。 他指出,我不需要創建單獨的防火牆。 相反,只需將我的自定義身份驗證提供程序(負責將當前會話與待處理訂單進行匹配)添加到"main"配置,並通過自定義屬性和自定義投票者控制授權:

security.yml

firewalls:
    main:
        pattern: ^/
          form_login:
              check_path: /user/login_check
              provider: fos_userbundle
              csrf_provider: form.csrf_provider
              default_target_path: /user/home
          logout:
              invalidate_session: false
              path: /user/logout
              target: /
          shop_auth: true #Ta-da!

access_controls:
    - { path: /shop, [CAN_SHOP, ... ] }

不確定我是否真的解決了您的問題。 可能會有助於您知道可以設置一個鏈提供商以從多個“提供商”登錄:

providers:
  chain_provider:
     chain:
       providers: [shop_auth, main_provider]
  shop_auth:
     id: service.shop_auth
  main_provider: 
     id: fos_userbundle

firewalls:
  # ...
  shop:
    form_login:
       provider: chain_provider

暫無
暫無

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

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