我有一个使用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。
答案 0 :(得分:3)
如果您已设法创建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,但是如果你每次都生成一个新的,那么这应该有效。