2015-05-29 67 views
0

我有一個使用Net :: Google :: Spreadsheets的應用程序。它在本週早些時候開始失敗並出現身份驗證錯誤。我的理解是Google已經不贊成使用某些身份驗證方法,並且我們現在要使用OAuth2。Net :: Google :: Spreadsheets登錄失敗。需要使用雙腿OAuth2

我的應用程序運行一個無頭的服務器上,所以我不能使用Net::Google::AuthSub login failed with new Google Drive version

顯示我需要用兩條腿的認證與服務帳戶的三條腿的OAuth2解決方案。我將代碼放在一起構建JWT,並獲取access_token(詳見Google開發人員文檔)。

我需要一些幫助是我需要使用獲取Net :: Google :: Spreadsheets來使用此access_token的方法,或者使用此模塊來執行雙腿OAuth2的方法。

回答

2

如果你已經設法創建了access_token,那麼你應該可以通過使用它來創建一個新的Net::OAuth2::AccessToken對象,然後或多或少地進行處理,使其能夠以Net :: Google :: Spreadsheets的正確格式獲得在example you linked to in the other thread

use Net::Google::Spreadsheets; 
use Net::Google::DataAPI::Auth::OAuth2; 
use Net::OAuth2::AccessToken; 

my $oauth2 = Net::Google::DataAPI::Auth::OAuth2->new(
    client_id => 'my_client_id.apps.googleusercontent.com', 
    client_secret => 'my secret', 
    scope => ['http://spreadsheets.google.com/feeds/'], 
    ); 
my $access_token = 'token you generate somehow'; 

my $token = Net::OAuth2::AccessToken->new(access_token => $access_token, 
        profile => $oauth2->oauth2_webserver, 
        token_type => 'Bearer', 
       ); 
$oauth2->access_token($token); 

my $service = Net::Google::Spreadsheets->new(auth => $oauth2); 

然後你可以使用那裏的服務。如果你想重複使用同一個標記,你還需要得到一個refresh_token,並且包含它,以及設置auto_refresh,但是如果你每次都生成一個新的,這應該起作用。

+0

ELNJ,非常感謝您的回覆。這幾乎做了訣竅。這照顧了身份驗證,我唯一需要做的其他事情就是與我生成的服務帳戶電子郵件地址(而不是我的主要電子郵件地址)共享我的電子表格。 – NRH

+0

太棒了,很高興它爲你工作,@NRH。您能否將答案標記爲「已接受」? – ELNJ

相關問題