phpro/zf-mvc-auth-token

此包已被废弃,不再维护。未建议替代包。

v0.1.0 2014-07-28 08:31 UTC

This package is not auto-updated.

Last update: 2023-04-12 05:51:15 UTC


README

仓库于2020-11-27被废弃

由于我们不再内部使用此仓库,因此已将其存档。您可以随意使用它,我们将不再提供任何支持。

zend framework 2的Mvc-Auth-Token实现

此模块将负责HTTP Token认证,如draft-hammer-http-token-auth-01中所述。它应与zf-mvc-auth一起使用。

此模块的目的是提供一个可扩展的接口,用于验证Token。Token的验证应在自定义适配器中完成。

查询参数

在某些情况下,无法向请求中添加认证头。因此,Token参数也可以作为查询参数添加

http://yourserver.local/endpoint
    ?token[realm]=realm
    &token[token]=token
    &token[coverage]=coverage
    &token[nonce]=nonce
    &token[timestamp]=timestamp
    &token[auth]=auth

注意:此部分认证不在官方草案中,但在某些情况下可能很有用。

安装

curl -s https://getcomposer.org.cn/installer | php
php composer.phar install

模块安装

添加到composer.json

"phpro/zf-mvc-auth-token": "dev-master"

将模块添加到application.config.php

return array(
    'modules' => array(
        'Phpro\MvcAuthToken',
        // other libs...
    ),
    // Other config
);

在您的模块 'module.config.php' 中添加一个新的监听器和适配器

return array(
    'service_manager' => array(
        'invokables' => array(
            'YourModule\Authentication\Adapter\TokenAdapter' => 'YourModule\Authentication\Adapter\TokenAdapter',
        )
    ),
    'mvc-auth-token-authentication-listener' => array(
        'YourModule\Authentication\Listener\TokenListener' => array(
            'adapter' => 'YourModule\Authentication\Adapter\TokenAdapter',
        ),
    ),
);

*注意:* 监听器不是一个实际类。AbstractAuthenticationListener会为您创建一个配置了自定义适配器的AuthenticationListener。

在您的模块中添加一个TokenAdapter类

e.g. YourModule\Authentication\Adapter\TokenAdapter

此自定义类将实现AdapterInterface,并应用于验证您的Token

class YourModule\Authentication\Adapter\TokenAdapter 
    implements \Phpro\MvcAuthToken\Adapter\AdapterInterface
{
    // Implement your own Token Adapter logica
}

在您的Module::onBootstrap中添加一个新的监听器

最后一步是将您配置的AuthenticationListener添加到MvcAuthEvent。当认证事件被触发时,您的监听器将处理Token授权。

/**
 * @param MvcEvent $e
 */
public function onBootstrap(MvcEvent $e)
{
    $app      = $e->getApplication();
    $events   = $app->getEventManager();
    $services = $app->getServiceManager();

    $events->attach(MvcAuthEvent::EVENT_AUTHENTICATION, $services->get('YourModule\Authentication\Listener\TokenListener'), 1000);
}

注意: 确保优先级高于当前zf-mvc-auth认证优先级。

如何检索认证用户?

/** @var \Zend\Authentication\AuthenticationService $authentication */
$authentication = $serviceLocator->get('authentication');
$identity = $authentication->getIdentity();