【发布时间】:2018-11-18 12:41:11
【问题描述】:
从开发者控制台获取服务帐户的凭据
首先,我将 p12 私钥转换为 PEM:
openssl pkcs12 -in <private key for Service Account>.p12 -out calendar.key -nocerts -nodes
然后我运行:
use MIME::Base64;
use Crypt::OpenSSL::RSA;
use File::Slurp;
my $header = encode_base64('{"alg":"RS256","typ":"JWT"}','');
my $claim = encode_base64('{
"iss":"<mail for the Service Account>",
"scope":"https://www.googleapis.com/auth/calendar",
"aud":"https://accounts.google.com/o/oauth2/token",
"exp":'.(time()+3600).',
"iat":'.time().'
}','');
my $key = read_file('calendar.key');
my $rsa = Crypt::OpenSSL::RSA->new_private_key($key);
$rsa->use_sha256_hash;
$rsa->use_pkcs1_padding;
my $signature = encode_base64($rsa->sign($header . '.' . $claim), '');
my $token_request = $header . '.' . $claim . '.' . $signature;
print `curl -d 'grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Ajwt-bearer&assertion=$token_request' https://accounts.google.com/o/oauth2/token`;
我明白了
{
"error" : "invalid_grant"
}
我用 NTP 同步了系统时间,没有帮助。
【问题讨论】:
标签: perl oauth-2.0 google-api google-calendar-api google-oauth