[英]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
並在Typo3BackendProvider
和VendorPackageProvider
使用相同的名稱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.