macsidigital/laravel-oauth2-client

Laravel OAuth2 客户端

2.1.0 2023-02-15 11:03 UTC

This package is auto-updated.

Last update: 2024-09-04 10:33:01 UTC


README

Laravel OAuth 2 客户端认证包

Header Image

tests badge version badge downloads badge

一个简单的 OAuth 2 客户端认证库

支持我们

我们投入了大量精力创建开源包,如果您从中获利,我们将非常感激赞助

安装

您可以通过 composer 安装此包

composer require macsidigital/laravel-oauth2-client

包助手

包助手可用于返回包版本

使用方法

此库的主要目的是处理 OAuth 2 的认证需求。然后您应该有一个令牌,可以在 API 客户端中使用。

支持文件和数据库的令牌驱动程序。

文件

文件驱动程序将在 storage/app/oauth2 中保存一个文件,该文件将保存与 OAuth 2 服务器通信所需的令牌详细信息。

数据库

配置

如果您想使用 DB 驱动程序并希望自定义表名,则可以发布配置文件并修改 table_name 列

php artisan vendor:publish --provider="MacsiDigital\OAuth2\Providers\OAuth2ServiceProvider" --tag="integration-config"

迁移

如果使用 DB 驱动程序,则需要发布迁移。

php artisan vendor:publish --provider="MacsiDigital\OAuth2\Providers\OAuth2ServiceProvider" --tag="integration-migrations"

然后您需要运行迁移

php artisan migrate

集成配置

大多数设置可以在配置文件中找到,需要将其复制并放置在 Laravel 配置目录中

return [
	'oauth2' => [
		'clientId' => '',
		'clientSecret' => '',
	],
	'options' => [
		'scope' => ['openid email profile offline_access accounting.settings accounting.transactions accounting.contacts accounting.journals.read accounting.reports.read accounting.attachments']
	],
	'tokenProcessor' => '\MacsiDigital\OAuth2\Support\AuthorisationProcessor',
	'tokenModel' => '\MacsiDigital\OAuth2\Support\Token\File',
	'authorisedRedirect' => '',
	'failedRedirect' => '',
];

(待办:创建一个命令来自动发布配置文件)

由于库的主要重点是包,因此需要通过服务提供程序使用集成名称将其加载到 Laravel 中。所以对于 xero:-

$this->mergeConfigFrom(__DIR__.'/../../config/config.php', 'xero');

您还需要检查 OAuth 2 服务器的凭证要求,并根据需要添加到配置中。

授权与授权处理器

已预定义了一些路由来连接到 OAuth 2 服务器,命名路由为 'oauth2.authorise' & 'oauth2.callback',两者都需要传递集成。所以对于 xero:-

route('oauth2.authorise', ['integration' => 'xero']); // will return /oauth2/xero/authorise

如果您使用的是简单的服务器,并且所有设置都正确,我们应该很快就能链接账户。

然而,一些 API 将有自定义处理要求,例如 Xero 需要租户 ID。

在这种情况下,我们需要创建一个自定义授权处理器,该处理器将 League/Oauth2-client AccessToken 和集成名称传递,以便可以拉取配置。

所以对于 Xero 来说,它会看起来像这样:

<?php

namespace MacsiDigital\Xero\Support;

use MacsiDigital\Xero\Facades\Identity;
use MacsiDigital\Xero\Identity\Connection;
use MacsiDigital\Xero\Exceptions\CantRetreiveTenantException;

class AuthorisationProcessor
{
	public function __construct($accessToken, $integration)
    {
    	$config = config($integration);
    
    	$token = $config['tokenModel'];

    	$token = (new $token($integration))->set([
        	'accessToken' => $accessToken->getToken(),
        	'refreshToken' => $accessToken->getRefreshToken(),
        	'expires' => $accessToken->getExpires(),
        	'idToken' => $accessToken->getValues()['id_token']
        ])->save();

    	$connection = Identity::connection()->raw()->get();
    	
    	if($connection != []){
    		$tenantId = $connection->json()[0]['tenantId'];
	        
	        $token->set(['tenantId' => $tenantId])->save();

	        return $token;
    	} else{
    		throw new CantRetreiveTenantException;
    	}
       
    }

}

现在我们的访问令牌等已保存,我们应该能够使用 macsidigital/laravel-api-client 与 OAuth 2 API 进行通信,当然每个 API 都会不同,因此您需要检查文档。以下是如何使用存储的详细信息与 Xero API 通信的示例。

<?php

namespace MacsiDigital\Xero\Support;

use MacsiDigital\Xero\Facades\Client;
use MacsiDigital\API\Support\Entry as ApiEntry;

class Entry extends ApiEntry
{

    public function newRequest()
    {   
    	$config = config('xero');
    	$class = $config['tokenModel'];
    	$token = new $class('xero');
    	if($token->hasExpired()){
    		$token = $token->renewToken();
    	}
        return Client::baseUrl($config['baseUrl'])->withToken($token->accessToken())->withHeaders(['xero-tenant-id' => $token->tenantId()]);
    }

}

测试

composer test

待办事项

  • 测试
  • 一些正式的文档

基本上,我们只是定义了如何授权和与 API 通信。有关更多详细信息,请参阅 laravel-api-client 的文档。

变更日志

请参阅变更日志了解最近发生了哪些变化。

贡献

请参阅贡献指南获取详细信息。

安全

如果您发现任何与安全相关的问题,请发送电子邮件至info@macsi.co.uk,而不是使用问题跟踪器。

鸣谢

许可

MIT 许可证(MIT)。请参阅许可文件获取更多信息。