我正在开发一个Symfony2应用程序,其API可用于其他应用程序.我想保护对API的访问.对于这部分我没有问题.
但是我必须使这个连接不是通常的登录/密码,而是使用API密钥.
所以我去了官方网站和它的精彩菜谱,用于创建自定义身份验证提供程序,正如我需要的,我对自己说.
这个例子不是我需要的,但我决定让它适应我的需要.
不幸的是我没有成功.
我会给你我的代码,之后我会解释我的问题.
这是我的工厂用于创建身份验证提供程序和侦听器:
<?php
namespace Pmsipilot\UserBundle\DependencyInjection\Security\Factory;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Reference;
use Symfony\Component\DependencyInjection\DefinitionDecorator;
use Symfony\Component\Config\Definition\Builder\NodeDefinition;
use Symfony\Bundle\SecurityBundle\DependencyInjection\Security\Factory\SecurityFactoryInterface;
class ApiFactory implements SecurityFactoryInterface
{
/**
* @param \Symfony\Component\DependencyInjection\ContainerBuilder $container
* @param string $id
* @param aray $config
* @param string $userProvider
* @param string $defaultEntryPoint
* @return array
*/
public function create(ContainerBuilder $container, $id, $config, $userProvider, $defaultEntryPoint)
{
$providerId = 'security.authentification.provider.api.'.$id;
$container
->setDefinition($providerId, new DefinitionDecorator('api.security.authentification.provider'))
->replaceArgument(0, new Reference($userProvider))
;
$listenerId = 'security.authentification.listener.api.'.$id;
$listener = $container->setDefinition($listenerId, new DefinitionDecorator('api.security.authentification.listener')); …Run Code Online (Sandbox Code Playgroud)