当前位置: 首页 > 知识库问答 >
问题:

带访问令牌的访问驱动器

蒋茂
2023-03-14

难以理解oauth2令牌和刷新令牌进程

我有这个代码

    $url = 'https://www.googleapis.com/oauth2/v3/token';
$data = array('client_id' => 'clientid', 'client_secret' => 'secret','refresh_token' => 'token','grant_type' => 'refresh_token');
$options = array(
    'http' => array(
        'header'  => "Content-type: application/x-www-form-urlencoded",
        'method'  => 'POST',
        'approval_prompt'=>'force',
        'access_type'=>'offline',
        'content' => http_build_query($data),
    ),
);
$context  = stream_context_create($options);
$result = file_get_contents($url, false, $context);

上面的代码给了我一个访问令牌,我遵循了stackoverflower的同事pinoyyid建议的链接,但是,我对如何正确使用生成的访问令牌访问驱动器和复制文件感到困惑。。。

我看到的所有过程通常都涉及到$client=new Google_client(),我不确定如何使用整个帖子http://.....事情,所以基本上我需要弄清楚,如果我在谷歌客户端的一个新实例中使用上面的代码获得的访问令牌,或者我只是在url上发布必要的信息(我也不清楚),任何帮助/澄清都非常感谢

编辑#1我想要实现的是允许最终用户通过我的网页访问我的驱动器,让他们复制我驱动器中的电子表格,并通过我的网站访问它,将数据存储在电子表格中,电子表格将始终在我的驱动器上,而不是最终用户

编辑#2

根据您的帖子代码如下,使用服务号,,,文件在我在api控制台上创建的gmail帐户中服务号

<?php
require 'Google/autoload.php';
$client = new Google_Client();
// Replace this with your application name.
$client->setApplicationName("TEST");
// Replace this with the service you are using.
$service = new Google_Service_Drive($client);

// This file location should point to the private key file.
$key = file_get_contents($_SERVER['DOCUMENT_ROOT'] . '/number-privatekey.p12');
$user_to_impersonate = 'admin@testpr.com';
$cred = new Google_Auth_AssertionCredentials(
  'number@developer.gserviceaccount.com',
  array('https://www.googleapis.com/auth/drive'),  ****//this here has to be drive not drive.file
  $key,
  'notasecret',
  'http://oauth.net/grant_type/jwt/1.0/bearer',
  $user_to_impersonate
);
$client->setAssertionCredentials($cred);
if ($client->getAuth()->isAccessTokenExpired()) {
  $client->getAuth()->refreshTokenWithAssertion();
}
$originFileId = "longnumber";
$copyTitle = 'copied';
$newfile = copyFile($service, $originFileId, $copyTitle);
print_r($newfile);
function copyFile($service, $originFileId, $copyTitle) 
{
  $copiedFile = new Google_Service_Drive_DriveFile();
  $copiedFile->setTitle($copyTitle);
  try {
    return $service->files->copy($originFileId, $copiedFile);
  } catch (Exception $e) {
    print "An error occurred: " . $e->getMessage();
  }
  return NULL;
}
?>

所以现在就开始工作了,伙计们,真的,我编辑了我的帖子来反映这该死的事情

共有1个答案

安承教
2023-03-14

如果您想让最终用户访问您的驱动器,您必须授权您的应用程序代表您的域中的用户(在本例中是您)进行API调用。为此,你必须建立一个服务帐户,并在谷歌开发者控制台生成一个p12密钥。您还必须在管理控制台中输入https://www.googleapis.com/auth/drive API范围。

完整的解释和例子可以在这里找到:https://developers.google.com/api-client-library/php/auth/service-accounts.

为了实现这一点,你还需要Google API的客户端库:https://github.com/google/google-api-php-client(在Google手册中也提到了)。

让用户代表您的一个帐户进行API调用的代码示例:https://developers.google.com/api-client-library/php/guide/aaa_oauth2_service

 类似资料:
  • 这段代码对我来说很好,但在可能24小时后,我需要再次进行身份验证过程。我希望这个认证过程只做一次,因为在我的项目中,他们将没有人参与,所以没有人会手动进行认证。任何帮助都将不胜感激。

  • 问题内容: 我将Google云端硬盘集成到我的应用中。并且希望每当连接的驱动器帐户中发生任何更改时都接收推送通知/ webhooks。自连接驱动器帐户一小时后,access_token过期,此后我无法收到任何Webhook。如何刷新并自动刷新? 问题答案: 您可以使用刷新令牌。可以通过刷新令牌来更新访问令牌。可以按以下方式检索此刷新令牌。首先,需要以下信息来检索refreshtoken。 客户编号

  • 访问令牌凭据(以及任何机密的访问令牌属性)在传输和储存时必须保持机密性,并只与授权服务器、访问令牌生效的资源服务器和访问令牌被颁发的客户端共享。访问令牌凭据必须只能使用带有RFC2818定义的服务器身份验证的1.6节所述的TLS 传输。 当使用隐式授权许可类型时,访问令牌在URI片段中传输,这可能泄露访问令牌给未授权的一方。 授权服务器必须确保访问令牌不能被生成、修改或被未授权一方猜测而产生有效的

  • 访问令牌是用于访问受保护资源的凭据。访问令牌是一个代表向客户端颁发的授权的字符串。该字符串通常对于客户端是不透明的。令牌代表了访问权限的由资源所有者许可并由资源服务器和授权服务器实施的具体范围和期限。 令牌可以表示一个用于检索授权信息的标识符或者可以以可验证的方式自包含授权信息(即令牌字符串由数据和签名组成)。额外的身份验证凭据——在本规范范围以外——可以被要求以便客户端使用令牌。 访问令牌提供了

  • 我使用postMan,输入请求地址http://localhost:8011/umrah/oauth/token?client_id=client_2&username=1234567&password=123456&grant_type=password&client_secret=123456,点击send按钮,出现错误,在内存中工作正常,当我想使用Jdbc令牌存储时,想法控制台错误:找不到令

  • 我很难让Auth0以JWT格式返回访问令牌。我需要JWT格式的文件,以便使用javajwt库验证它们。 我正在使用Auth0登录,并使用获取访问令牌-我尝试将访问群体设置为我们的API标识符(在多个位置,包括lock auth参数和负载),但没有成功-返回访问令牌,但不是JWT。 或者,是否有用于验证“本机”Auth0访问令牌的Java库? 返回的代码用于POST到