[英]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.