webiik / oauth2client
OAuth2Client 允许您连接到任何 OAuth2 服务器。
Requires
- php: >=7.2
- webiik/curlhttpclient: ^1
This package is auto-updated.
Last update: 2024-09-08 22:06:04 UTC
README
OAuth2Client
OAuth2Client 允许您连接到任何 OAuth2 服务器。只需按照以下示例中的步骤进行操作。
安装
composer require webiik/oauth2client
示例
// Facebook Example // Prepare dependencies $chc = new \Webiik\CurlHttpClient\CurlHttpClient(); // Instantiate OAuth2 client $oAuth2Client = new \Webiik\OAuth2Client\OAuth2Client($chc); // Your callback URL after authorization // OAuth2 server redirects users to this URL, after user verification $oAuth2Client->setRedirectUri('https://127.0.0.1/webiik/'); // API endpoints $oAuth2Client->setAuthorizeUrl('https://#/v3.3/dialog/oauth'); $oAuth2Client->setAccessTokenUrl('https://graph.facebook.com/v3.3/oauth/access_token'); $oAuth2Client->setValidateTokenUrl('https://graph.facebook.com/debug_token'); // API credentials (create yours at https://developers.facebook.com/apps/) $oAuth2Client->setClientId('your-client-id'); $oAuth2Client->setClientSecret('your-client-sectret'); // Make API calls... // Define scope $scope = [ 'email', ]; if (!isset($_GET['code'])) { // 1. Prepare Facebook user login link with specified scope and grand type echo '<a href="' . $oAuth2Client->getAuthorizeUrl($scope) . '" target="_blank">Authorize with Facebook</a><br/>'; } if (isset($_GET['code'])) { // 2. Verify code to obtain user access_token $user = $oAuth2Client->getAccessTokenByCode(); // 3. Verify clientId and clientSecret to obtain app access_token $app = $oAuth2Client->getAccessTokenByCredentials(); } if (isset($user, $user['access_token']) && isset($app, $app['access_token'])) { // 4. User and app access_tokens are valid, user and app are authorized by Facebook // Access protected resources... // Get user id $tokenInfo = $oAuth2Client->getTokenInfo($user['access_token'], $app['access_token'], true); if (!isset($tokenInfo['data'], $tokenInfo['data']['user_id'])) { // Err: Can't obtain user id print_r($tokenInfo); exit; } // Get additional user info $fields = [ 'name', 'first_name', 'middle_name', 'last_name', 'email', ]; $reg = $chc->prepareRequest('https://graph.facebook.com/v3.3/' . $tokenInfo['data']['user_id'] . '/?access_token=' . $user['access_token'] . '&fields=' . implode(',', $fields)); $res = $chc->send($reg); if ($res->isOk()) { header('Content-Type: application/json'); echo $res->body(); } }
配置
在您能够连接到任何 OAuth2 服务器之前,您必须正确配置访问凭据和端点。
setClientId
setClientId(string $id): void
setClientId() 设置客户端 ID。
$oAuth2Client->setClientId('your-client-id');
setClientSecret
setClientSecret(string $secret): void
setClientSecret() 设置客户端密钥。
$oAuth2Client->setClientSecret('your-client-sectret');
setRedirectUri
setRedirectUri(string $url): void
setRedirectUri() 设置重定向 URI,在 OAuth2 服务器授权后重定向用户。
$oAuth2Client->setRedirectUri('https://127.0.0.1/webiik/');
setAuthorizeUrl
setAuthorizeUrl(string $url): void
setAuthorizeUrl() 设置通过 OAuth2 服务器授权用户的 URL。
$oAuth2Client->setAuthorizeUrl('https://#/v3.2/dialog/oauth');
setAccessTokenUrl
setAccessTokenUrl(string $url): void
setAccessTokenUrl() 设置获取访问令牌的 URL。
$oAuth2Client->setAccessTokenUrl('https://graph.facebook.com/v3.2/oauth/access_token');
setValidateTokenUrl
setValidateTokenUrl(string $url): void
setValidateTokenUrl() 设置验证访问令牌的 URL。此端点不是 OAuth2 规范的官方部分,但是 Google、Facebook 等提供了它。
$oAuth2Client->setValidateTokenUrl('https://graph.facebook.com/debug_token');
登录
getAuthorizeUrl
getAuthorizeUrl(array $scope = [], string $responseType = 'code', string $state = ''): string
getAuthorizeUrl() 准备一个正确的链接到由 setAuthorizeUrl() 设置的 URL。
参数
- scope 定义您应用程序的访问范围。了解各个 OAuth2 服务器提供的访问范围。
- responseType 可能的响应类型包括 code、token、id_token 等...
- state 了解有关 state 参数 的信息。
$link = $oAuth2Client->getAuthorizeUrl(['email'])
授权
OAuth2Client 允许您通过 OAuth2 协议提供的所有授权类型获取访问令牌。有关 授权类型 的更多信息。
getAccessTokenByCode
getAccessTokenByCode()
getAccessTokenByCode() 向由 setAccessTokenUrl() 设置的 URL 发送 HTTP POST 请求。在成功时返回包含令牌的数组,在出错时返回 cURL 错误消息字符串。此授权类型通常用于应用程序对用户进行身份验证。
$user = $oAuth2Client->getAccessTokenByCode();
getAccessTokenByPassword
getAccessTokenByPassword(string $username, string $password, array $scope = [])
getAccessTokenByPassword() 向由 setAccessTokenUrl() 设置的 URL 发送 HTTP POST 请求。在成功时返回包含令牌的数组,在出错时返回 cURL 错误消息字符串。此授权类型通常用于受信任的应用程序对用户进行身份验证。
$user = $oAuth2Client->getAccessTokenByCode();
getAccessTokenByCredentials
getAccessTokenByCredentials()
getAccessTokenByCredentials() 向由 setAccessTokenUrl() 设置的 URL 发送 HTTP POST 请求。在成功时返回包含令牌的数组,在出错时返回 cURL 错误消息字符串。此授权类型通常用于服务器到服务器的通信。
$app = $oAuth2Client->getAccessTokenByCredentials();
getAccessTokenByRefreshToken
getAccessTokenByRefreshToken(string $refreshToken)
getAccessTokenByRefreshToken() 向由 setAccessTokenUrl() 设置的 URL 发送 HTTP POST 请求。在成功时返回包含令牌的数组,在出错时返回 cURL 错误消息字符串。通常您可以通过在调用 getAuthorizeUrl() 时设置范围 offline_access 来获取 $refreshToken。有关 refresh_token 的更多信息。它用于获取新的访问令牌。
$token = $oAuth2Client->getAccessTokenByRefreshToken($refreshToken);
getAccessTokenBy
getAccessTokenBy(array $params)
getAccessTokenBy() 通过向由 setAccessTokenUrl() 设置的 URL 发送 HTTP POST 请求。成功时返回包含令牌的数组,出错时返回 cURL 错误信息的字符串。此方法允许您通过自定义参数获取访问令牌。
// Get access token by code $user = $oAuth2Client->getAccessTokenBy([ 'redirect_uri' => 'https://127.0.0.1/webiik/', 'grant_type' => 'authorization_code', 'code' => $_GET['code'], ]);
getTokenInfo
getTokenInfo(string $inputToken, string $accessToken, bool $useGet = false)
getTokenInfo() 通过向由 setValidateTokenUrl() 设置的 URL 发送 HTTP POST 请求。成功时返回包含令牌的数组,出错时返回 cURL 错误信息的字符串。这不是 OAuth2 规范的官方部分,但 Google、Facebook 等公司提供了它。
$token = $oAuth2Client->getTokenInfo($inputToken, $accessToken);