簡體   English   中英

TYPO3 Neos:程序包的身份驗證提供程序

[英]TYPO3 Neos: authentication provider for a package

有許多使用登錄設置身份驗證提供程序的示例,但是我找不到如何為程序包設置身份驗證提供程序的示例。

TYPO3 Neos v1.2.x

我有一個帶有后端編輯器的軟件包。 編輯器應通過控制器進行通訊。 到目前為止,所有工作正常,但現在無法訪問控制器。 如果我看一下TYPO3 Neos軟件包Settings.yaml,則有一個controllerObjectName選項。

      Typo3BackendProvider:
        provider: 'PersistedUsernamePasswordProvider'
        requestPatterns:
          controllerObjectName: 'TYPO3\Neos\Controller\.*|TYPO3\Neos\Service\.*|TYPO3\Media\Controller\.*'
        entryPoint: 'WebRedirect'
        entryPointOptions:
          routeValues:
            '@package':    'TYPO3.Neos'
            '@controller': 'Login'
            '@action':     'index'
            '@format':     'html'

如果我也將控制器添加到此選項,則它可以工作:

          controllerObjectName: 'TYPO3\Neos\Controller\.*|TYPO3\Neos\Service\.*|TYPO3\Media\Controller\.*|Vendor\Package\Controller\Backend\.*'

但是我無法想象,答案是要覆蓋Neos設置。

因此,我嘗試添加一個具有Typo3BackendProvider相同設置的自己的提供程序。

      VendorPackageProvider:
        provider: 'PersistedUsernamePasswordProvider'
        requestPatterns:
          controllerObjectName: 'Vendor\Package\Controller\Backend\.*'
        entryPoint: 'WebRedirect'
        entryPointOptions:
          routeValues:
            '@package':    'TYPO3.Neos'
            '@controller': 'Login'
            '@action':     'index'
            '@format':     'html'

因為這將無法工作,所以我嘗試使用tokenClass並在Typo3BackendProviderVendorPackageProvider使用相同的名稱VendorPackageProvider進行了定義。 不行

該日志也無濟於事:

14-12-25 17:52:25 66198      127.0.0.1      INFO      Flow                 Session 52exQd3r1orQA35gTfjQZhhOae4x5SVh contains auth token TYPO3\Flow\Security\Authentication\Token\UsernamePassword for provider VendorPackageProvider. Status: no credentials given
14-12-25 17:52:25 66198      127.0.0.1      INFO      Flow                 Access denied (0 denied, 0 granted, 1 abstained) to method Vendor\Package\Controller\Backend\MyController::indexAction().
14-12-25 17:52:25 66198      127.0.0.1      INFO      Flow                 Redirecting to authentication entry point
    routeValues => array (
       @package => TYPO3.Neos
       @controller => Login
       @action => index
       @format => html
    )

至少我的Policy.yaml:

resources:
  methods:
    Vendor_Package_BackendAccess: 'method(Vendor\Package\Controller\Backend\MyController->(initalize|index)Action())'

acls:
  'TYPO3.Neos:Editor':
    methods:
      Vendor_Package_BackendAccess: GRANT

對於任何其他在Flow Framework / Neos身份驗證提供程序中對此有所疑問的人。

可以避免覆蓋Neos主軟件包設置的提供程序,並添加自己的提供程序,但是它並不干凈,並且存在嚴重的缺陷。

訣竅是添加另一個具有相同名稱但大小寫不同的提供程序。 例如,在這里您有Typo3BackendProvider ,因此可以用typo3backendprovider對此進行typo3backendprovider (全部為小寫字母,但您可以根據需要更改一個字母或一個字母)。 在此提供程序條目中,您設置了相同的提供程序類和您的requestpattern,在入口點的控制器上有很小的重疊。 技巧的第二部分是將authenticationStrategy設置為atLeastOneToken

因此,在您程序包的Settings.yaml中:

providers:
  authenticationStrategy: atLeastOneToken
  typo3backendprovider:
    provider: 'PersistedUsernamePasswordProvider'
    requestPatterns:
      controllerObjectName: 'TYPO3\Neos\Controller\LoginController\?.*|Vendor\Package\Controller\Backend\.*'

(您的軟件包必須位於PackageStates.php或composer.json中的Neos軟件包后面,或者您必須將其放在全局配置中)

現在登錄時,Flow身份驗證框架將找到兩個活動的身份驗證提供程序,並使用相同的憑據進行身份驗證。 當它在Neos后端控制器中時,它將找到一個已認證令牌,而在后端控制器中,它還將找到一個已認證令牌。 在注銷時,authenticationmanager即使使用技術上僅注銷一個令牌或另一個令牌,也將使用兩個令牌銷毀會話。

這個技巧有一個明顯的缺點,就是對查詢配置的人有點模糊,並且看到兩個看起來非常相似的身份驗證提供程序。 同樣在登錄時,哈希時間被加倍,因為它被檢查了兩次,因此這不能擴展到將它們的后端空間組合在一起的多個包。 最后,如果另一個提供者在此之前進行了身份驗證並繼續進行,則atLeastOneToken策略可能會導致意外的多因素身份驗證的意外結果。

更好地將其設置為全局

考慮到缺點,我想說重寫默認提供程序的controllerObjectName並不是一件壞事。 實際上,這確實意味着Typo3BackendProvider管理該精確區域的身份驗證令牌。 應該在全局Configuration/Settings.yaml而不是在包本身中進行設置,以避免出現多個定義controllerObjectName的包而僅保留最后一個的問題。 在Packages的設置內,您也可以對其進行設置,這樣,如果您忘記了全局配置,它將使正常的后端顯然無法正常工作。

暫無
暫無

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

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