2013-08-20 205 views
0

我試圖通過Google的服務帳戶身份驗證來驗證我的服務器應用程序,但由於某種原因,它只是沒有通過。Google OAuth2服務帳戶API授權

API console中,我已經創建了項目,啓用了我需要的服務(Admin SDK),並創建了服務帳戶和Web應用程序API訪問。

當我使用的Web應用程序的訪問憑據,我能夠進行身份驗證並檢索用戶記錄。但使用服務帳戶身份驗證會不斷給我一個登錄所需的信息。

"error": { "errors": [ { "domain": "global", "reason": "required", "message": "Login Required", "locationType": "header", "location": "Authorization" } ], "code": 401, "message": "Login Required" } 

我忘了添加,我正在用PHP客戶端庫進行測試。

public function init() { 
    $client = new Google_Client(); 

    if (isset($_SESSION['access_token'])) { 
    $client->setAccessToken($_SESSION['access_token']); 
    } 

    $key = file_get_contents(App::SERVICE_KEY_FILE); 
    $client->setAssertionCredentials(new Google_AssertionCredentials(
     App::SERVICE_ACCOUNT_NAME, 
     App::SERVICE_API_SCOPES, 
     $key) 
); 

    $client->setClientId(App::SERVICE_CLIENT_ID); 
    debug($client, 'CLIENT'); 

    if ($client->getAccessToken()) { 
    $this->access_token = $_SESSION['access_token'] = $client->getAccessToken(); 
    debug($_SESSION['access_token'], 'TOKEN'); 
    } else { 
    debug('NO TOKEN'); 
    } 
    $this->client = $client; 
} 

正如你看到的,代碼基本上是差不多的谷歌的例子。我錯過了一個額外的步驟?

最後一件事,當我使用驗證的Web應用程序,然後進入我的服務帳戶的腳本,服務帳戶腳本可以拿起web應用程序腳本的會議,並與用戶記錄檢索度過。這是否意味着Admin SDK API通過Web應用程序身份驗證明確需要用戶交互?

回答

0

而是服務帳戶,而不是我選擇使用安裝的應用程序的API訪問。

這紅寶石的寶石其實是幫我想出解決辦法 - https://github.com/evendis/gmail_cli
我與它的控制檯上玩,只是跟着自述文件中的授權步驟,發現安裝的應用程序做服務器管理的應用程序時更簡單。

作爲對於新手,我想我錯過了刷新令牌,在整個過程中發揮的重要組成部分。通過安裝的應用程序方法幫助我弄清楚了這一點。

我的配置文件現在包含了客戶端ID,客戶端密鑰,API範圍,重定向URI,授權碼,並刷新令牌;我的初始化代碼現在看起來像:

public function init() { 
    $client = new Google_Client(); 

    $client->setClientId(App::CLIENT_ID); 
    $client->setClientSecret(App::CLIENT_SECRET); 
    $client->setScopes(App::API_SCOPES); 
    $client->setRedirectUri(App::REDIRECT_URI); 

    if (!$client->getAccessToken()) { 
    $client->refreshToken(App::REFRESH_TOKEN); 
    } 
    $this->access_token = $client->getAccessToken(); 
    $this->client = $client; 
} 
相關問題