cultuurnet/silex-service-provider-oauth

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

我们的 OAuth 组件的 Silex 服务提供程序。

dev-master / 0.x-dev 2019-08-01 10:11 UTC

This package is not auto-updated.

Last update: 2020-03-06 16:29:46 UTC


README

Archived because it is no longer used by any publiq applications and has not been updated significantly since 2015.

Silex 服务提供程序 OAuth

Build Status

这是为 OAuth 1.0 webservice 身份验证提供程序的 UiTID Silex SecurityServiceProvider

使用方法

有一个 示例应用程序,展示了如何集成和配置此组件。

首先在您的 Silex 应用程序中注册提供程序。提供所需 UiTID API 环境的基本 URL,以及允许访问 UiTID 凭证 API 的 OAuth 消费者密钥和密钥。

$app->register(
    new \CultuurNet\SilexServiceProviderOAuth\OAuthServiceProvider(),
    array(
        'oauth.fetcher.base_url' => 'http://acc2.uitid.be',
        'oauth.fetcher.consumer' => array(
            'key' => 'notsosecretkey',
            'secret' => 'verysecret',
        ),
    )
);

定义一个名为 oauth.model.provider.nonce_provider 的服务,该服务实现了 CultuurNet\SymfonySecurityOAuth\Model\Provider\NonceProviderInterface。 cultuurnet/symfony-security-oauth-redis 包提供了一个使用 Redis 进行存储的实现。它使用 predis PHP 客户端库来连接 Redis。但是,您可以使用自己的实现来使用合适的存储机制。

$app['predis.client'] = $app->share(
    function () {
        return new \Predis\Client('tcp://127.0.0.1:6379');
    }
);

$app['oauth.model.provider.nonce_provider'] = $app->share(
    function (\Silex\Application $app) {
        return new \CultuurNet\SymfonySecurityOAuthRedis\NonceProvider(
            $app['predis.client']
        );
    }
);

然后配置一个防火墙以使用 oauth 认证提供程序

$app->register(
  new \Silex\Provider\SecurityServiceProvider(),
  array(
      'security.firewalls' => array(
          'myapi' => array(
              'pattern' => '^/my/api/.*',
              'oauth' => true,
              'stateless' => true,
           ),
      ),
  )
);

为了提高性能,您可以缓存从 UiTID 凭证 API 获取的令牌。最佳做法是将原始 oauth.model.provider.token_provider 服务包装在实现相同接口的装饰器中,并负责缓存。同样,您可以使用自己的实现来使用合适的存储机制。 cultuurnet/symfony-security-oauth-redis 包提供了一个使用 Redis 的实现。

$app->extend(
    'oauth.model.provider.token_provider',
    function (
        \CultuurNet\SymfonySecurityOAuth\Model\Provider\TokenProviderInterface $tokenProvider,
        \Silex\Application $app
    ) {
        return new \CultuurNet\SymfonySecurityOAuthRedis\TokenProviderCache(
            $tokenProvider,
            $app['predis.client']
        );
    }
);