chadicus/slim-oauth2-routes

用于Slim框架API的OAuth2路由

v3.2.0 2023-05-09 20:04 UTC

This package is auto-updated.

Last update: 2024-09-09 22:59:45 UTC


README

Build Status Code Quality Code Coverage

Latest Stable Version Latest Unstable Version License

Total Downloads Daily Downloads Monthly Downloads

Documentation

用于Slim 3框架API的OAuth2服务器路由回调

要求

Chadicus\Slim\OAuth2\Routes 需要 PHP 5.6(或更高版本)。

Composer

要将库添加为本地项目依赖项,请使用 Composer!只需将 chadicus/slim-oauth2-routes 依赖项添加到项目的 composer.json 文件中,例如

composer require chadicus/slim-oauth2-routes

联系方式

开发者可通过以下方式联系

项目构建

检出代码后,在您的PATH中获取 Composer 并运行

./composer install
./vendor/bin/phpunit

关于视图使用的说明

authorizereceive-code 路由需要 view 对象。提供的视图对象必须实现一个渲染方法,例如在 slim/twig-viewslim/php-view 中找到的方法。最好有一个通用的 ViewInterface,这两个实现都使用它,但目前还没有这样一个接口。

社区

Gitter

示例用法

use Chadicus\Slim\OAuth2\Routes;
use OAuth2;
use OAuth2\GrantType;
use OAuth2\Storage;
use Slim;
use Slim\Views;

//Set-up the OAuth2 Server
$storage = new Storage\Pdo(array('dsn' => $dsn, 'username' => $username, 'password' => $password));
$server = new OAuth2\Server($storage);
$server->addGrantType(new GrantType\AuthorizationCode($storage));
$server->addGrantType(new GrantType\ClientCredentials($storage));

//Set-up the Slim Application
$app = new Slim\App(
    [
        'view' => new Views\PhpRenderer('/path/to/chadicus/slim-oauth2-routes/templates'),
    ]
);

$container = $app->getContainer();

$app->map(['GET', 'POST'], Routes\Authorize::ROUTE, new Routes\Authorize($server, $container['view']))->setName('authorize');
$app->post(Routes\Token::ROUTE, new Routes\Token($server))->setName('token');
$app->map(['GET', 'POST'], Routes\ReceiveCode::ROUTE, new Routes\ReceiveCode($container['view']))->setName('receive-code');
$app->post(Routes\Revoke::ROUTE, new Routes\Revoke($server))->setName('revoke');

//Add custom routes
$slim->get('/foo', function($request, $response, $args) {
    $authorization = $request->getHeaderLine('Authorization');

    //validate access token against your storage

    return $response->withStatus(200);
});

//run the app
$app->run();

授权和UserIdProvider

在授权路由中,您可以通过定义 UserIdProviderInterface 来从传入的请求中提取用户_id。默认情况下,路由将在 GET 查询参数中查找。

class ArgumentUserIdProvider implements UserIdProviderInterface
{
	public function getUserId(ServerRequestInterface $request, array $arguments)
	{
		return isset($arguments['user_id']) ? $arguments['user_id'] : null;
	}
}

//middleware to add user_id to route parameters
$loginMiddelware = function ($request, $response, $next) {
	// Validate the user credentials
	$userId = MyUserService::getUserIdIfValidCredentials($request);
	if ($userId === false) {
		return $response->withStatus(303);
	}

	//Put user_id into the route parameters
	$route = $request->getAttribute('route');
	$route->setArgument('user_id', $userId);

	//Credentials are valid, continue so the authorization code can be sent to the clients callback_uri
	return $next($request, $response);
};

$authorizeRoute = new Routes\Authorize($server, $view, 'authorize.phtml', new ArgumentUserIdProvider());
$app->map(
	['GET', 'POST'],
	Routes\Authorize::ROUTE,
	$authorizeRoute
)->add($loginMiddleware)->setName('authorize');