使用 Google 驱动器 API "without" 来自 php 的身份验证屏幕
Use Google Drive API "without" authentication screen from php
这就是我面临的情况。
我有一个 php 驱动的 Web 应用程序,我需要从中访问我的 Google Drive 帐户中的一些文件链接。我只需要访问我帐户中的文件,因为我存储了必须提供给不同客户的相同图像。
我试图查看 Google Drive API 文档,但我不需要 OAuth 和同意屏幕。该应用程序应该在 "background" 中访问我的 Google Drive 帐户,只是为了检索它必须呈现给客户的一些信息,而无需他们做任何事情。
我在 Whosebug 上阅读了非常相似的问题,但其中 none 确实帮助了我...有些提到了服务帐户的使用,有些则说它们对此没有用。
你能帮我理解在这种情况下哪种方法最好吗?非常感谢!
您正在寻找的是服务帐户。服务帐户是虚拟用户,他们实际上拥有自己的 google 驱动器帐户。由于他们是用户,因此您可以像与其他用户一样与他们共享文件。一旦文件与服务帐户共享,它就可以访问它,然后可以像使用 Oauth2 一样使用它,当您仅登录时,您不需要登录并同意访问,因为您已经配置了访问权限。
require_once __DIR__ . '/vendor/autoload.php';
// Use the developers console and download your service account
// credentials in JSON format. Place the file in this directory or
// change the key file location if necessary.
putenv('GOOGLE_APPLICATION_CREDENTIALS='.__DIR__.'/service-account.json');
/**
* Gets the Google client refreshing auth if needed.
* Documentation: https://developers.google.com/identity/protocols/OAuth2ServiceAccount
* Initializes a client object.
* @return A google client object.
*/
function getGoogleClient() {
return getServiceAccountClient();
}
/**
* Builds the Google client object.
* Documentation: https://developers.google.com/api-client-library/php/auth/service-accounts
* Scopes will need to be changed depending upon the API's being accessed.
* array(Google_Service_Analytics::ANALYTICS_READONLY, Google_Service_Analytics::ANALYTICS)
* List of Google Scopes: https://developers.google.com/identity/protocols/googlescopes
* @return A google client object.
*/
function getServiceAccountClient() {
try {
// Create and configure a new client object.
$client = new Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope([YOUR SCOPES HERE]);
return $client;
} catch (Exception $e) {
print "An error occurred: " . $e->getMessage();
}
}
这就是我面临的情况。 我有一个 php 驱动的 Web 应用程序,我需要从中访问我的 Google Drive 帐户中的一些文件链接。我只需要访问我帐户中的文件,因为我存储了必须提供给不同客户的相同图像。 我试图查看 Google Drive API 文档,但我不需要 OAuth 和同意屏幕。该应用程序应该在 "background" 中访问我的 Google Drive 帐户,只是为了检索它必须呈现给客户的一些信息,而无需他们做任何事情。
我在 Whosebug 上阅读了非常相似的问题,但其中 none 确实帮助了我...有些提到了服务帐户的使用,有些则说它们对此没有用。
你能帮我理解在这种情况下哪种方法最好吗?非常感谢!
您正在寻找的是服务帐户。服务帐户是虚拟用户,他们实际上拥有自己的 google 驱动器帐户。由于他们是用户,因此您可以像与其他用户一样与他们共享文件。一旦文件与服务帐户共享,它就可以访问它,然后可以像使用 Oauth2 一样使用它,当您仅登录时,您不需要登录并同意访问,因为您已经配置了访问权限。
require_once __DIR__ . '/vendor/autoload.php';
// Use the developers console and download your service account
// credentials in JSON format. Place the file in this directory or
// change the key file location if necessary.
putenv('GOOGLE_APPLICATION_CREDENTIALS='.__DIR__.'/service-account.json');
/**
* Gets the Google client refreshing auth if needed.
* Documentation: https://developers.google.com/identity/protocols/OAuth2ServiceAccount
* Initializes a client object.
* @return A google client object.
*/
function getGoogleClient() {
return getServiceAccountClient();
}
/**
* Builds the Google client object.
* Documentation: https://developers.google.com/api-client-library/php/auth/service-accounts
* Scopes will need to be changed depending upon the API's being accessed.
* array(Google_Service_Analytics::ANALYTICS_READONLY, Google_Service_Analytics::ANALYTICS)
* List of Google Scopes: https://developers.google.com/identity/protocols/googlescopes
* @return A google client object.
*/
function getServiceAccountClient() {
try {
// Create and configure a new client object.
$client = new Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope([YOUR SCOPES HERE]);
return $client;
} catch (Exception $e) {
print "An error occurred: " . $e->getMessage();
}
}