簡體   English   中英

帶有服務帳戶的Google OAuth2 - 指定要代表的用戶電子郵件

[英]Google OAuth2 with Service Account - specifying the user email to act on behalf of

我正在嘗試以編程方式在Google日歷上添加活動和提醒。 我正在使用服務帳戶

我可以成功地將事件添加到我的Google日歷,但不能添加提醒。 這是因為事件是由服務帳戶電子郵件(類似於xyz@developer.gserviceaccount.com)添加的,我應該使用我的Gmail帳戶而不是服務帳戶添加提醒。

幸運的是,可以代表我的Gmail帳戶執行操作。 請參閱本頁底部: https//developers.google.com/api-client-library/php/guide/aaa_oauth2_service#using
它建議添加$cred->sub = "emailaddress@yourdomain.com";

但是在添加此代碼時出現以下錯誤:

Google_Auth_Exception:刷新OAuth2令牌時出錯,消息:'{“error”:“internal_failure”}'

我做錯了但我不知道是什么,這是我的代碼如下:

$applicationName = 'applicationName';
$serviceAccountEmail = 'xyzg@developer.gserviceaccount.com';
$serviceAccountKeyPath = __DIR__ . '/xyz-privatekey.p12';
$serviceAccountClientId = 'xyz.apps.googleusercontent.com';

$client = new \Google_Client();
$client->setApplicationName($applicationName);
$service = new \Google_Service_Calendar($client);

if (isset($_SESSION['service_token'])) {
    $client->setAccessToken($_SESSION['service_token']);
}
$key = file_get_contents($serviceAccountKeyPath);
$cred = new \Google_Auth_AssertionCredentials(
    // $serviceAccountName
    $serviceAccountEmail,
    // $scopes array List of scopes
    array('https://www.googleapis.com/auth/calendar'),
    // $privateKey
    $key
);
$client->setClientId($serviceAccountClientId);
$cred->sub = 'myEmail@gmail.com';
$client->setAssertionCredentials($cred);
if ($client->getAuth()->isAccessTokenExpired()) {
    $client->getAuth()->refreshTokenWithAssertion(); // fails on this line
}
$_SESSION['service_token'] = $client->getAccessToken();

PS:如果我取消注釋$cred->sub = 'myEmail@gmail.com'; 代碼不會拋出異常

模擬用戶的服務帳戶僅適用於Google Apps,請參閱https://code.google.com/p/google-apps-manager/wiki/GAM3OAuthServiceAccountSetup

如果您希望您的應用訪問任何用戶的日歷,您應該使用標准OAuth2流程獲得用戶的同意並存儲刷新令牌以供將來使用(因為您嘗試使用服務帳戶我認為這是服務器端應用程序)。 如果唯一的用戶是您自己並且您不打算將應用程序分發給其他任何人,則可以在服務器中對刷新令牌進行硬編碼。 以下是Google OAuth2網絡服務器流程的文檔: https//developers.google.com/accounts/docs/OAuth2WebServer

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM