TYPO3 Neos:包的身份验证提供程序
有很多例子可以通过登录设置身份验证提供程序,但我找不到如何为包设置身份验证提供程序的例子 类型3近地天体v1.2.x 我有一个后端编辑器包。编辑器应该通过控制器进行通信。到目前为止一切正常,但我现在无法访问控制器。如果我看一下TYPO3 Neos package Settings.yaml,有一个选项TYPO3 Neos:包的身份验证提供程序,typo3,typo3-flow,neoscms,Typo3,Typo3 Flow,Neoscms,有很多例子可以通过登录设置身份验证提供程序,但我找不到如何为包设置身份验证提供程序的例子 类型3近地天体v1.2.x 我有一个后端编辑器包。编辑器应该通过控制器进行通信。到目前为止一切正常,但我现在无法访问控制器。如果我看一下TYPO3 Neos package Settings.yaml,有一个选项controllerObjectName Typo3BackendProvider: provider: 'PersistedUsernamePasswordProvid
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\.*'
但我无法想象,答案是覆盖近地天体的设置
因此,我尝试添加一个具有相同设置的自己的提供者Typo3BackendProvider
VendorPackageProvider:
provider: 'PersistedUsernamePasswordProvider'
requestPatterns:
controllerObjectName: 'Vendor\Package\Controller\Backend\.*'
entryPoint: 'WebRedirect'
entryPointOptions:
routeValues:
'@package': 'TYPO3.Neos'
'@controller': 'Login'
'@action': 'index'
'@format': 'html'
因为这不起作用,我尝试使用,并在Typo3BackendProvider
和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
)
至少是我的政策。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
(全部小写,但您可以随意上下更改一个字母)。在这个提供者条目中,您设置了相同的providerclass和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包后面,或者必须将其置于全局配置中)
现在在登录时,流身份验证框架将找到两个活动的身份验证提供程序,并使用相同的凭据对它们进行身份验证。当它在Neos后端控制器中时,它会找到一个经过身份验证的令牌,在您的后端控制器中,它也会找到一个经过身份验证的令牌。注销时,authenticationmanager将使用两个令牌销毁会话,即使技术上仅注销一个令牌或另一个令牌
这种技巧的明显缺点是,对于查询配置并看到两个非常相似的身份验证提供程序的人来说,有点模糊。此外,在登录时,哈希时间会加倍,因为它会被检查两次,因此这对于将其后端空间组合在一起的多个包来说是不可伸缩的。最后,atLeastOneToken
策略可能会导致意外的多因素身份验证效果,如果其他提供商在此之前进行了身份验证并继续进行
最好让它全球化
鉴于这些缺点,我认为覆盖默认提供程序的controllerObjectName并不是一件坏事。这实际上意味着
Typo3BackendProvider
管理该精确区域的身份验证令牌。它应该在全局配置/设置.yaml中设置,而不是在包本身中设置,以避免多个包定义controllerObjectName时出现问题,只保留最后一个。在软件包的设置中,您也可以对其进行设置,这样,如果您忘记了全局配置,它将使正常后端明显无法工作。早上好,尽管您的问题已经提出一年了-您找到解决问题的方法了吗?我现在也在同一点上。嗨!我放弃了近地天体:(继续使用TYPO3 CMS。别理解我的错误,这是一个很好的概念,但有一些小问题我无法向客户解释。从后端的视口或在编辑器中设置链接开始。嗨!谢谢你的快速响应。我也使用平行TYPO3。但我认为Neos是一个很好的系统,尤其是基本fl对我来说,投入大量的时间和精力是值得的。我认为这是向近地天体提问的最好地方!