https://www.youtube.com/watch?v=iK14bfd6qhsでの Steve Bazyl のプレゼンテーションと、Google の関連する API ドキュメントを注意深く確認しました。Gmail アカウントにサービス アカウントのメール ID を使用しており、コンソールからダウンロードした秘密鍵を使用しています。
しかし、スティーブがプレゼンテーションで示したものをモデルにしたテストクライアントを実行すると、一貫して得られます
Signet::AuthorizationError:
Authorization failed. Server message:
{
"error" : "invalid_grant"
}
JWTAsserter に渡された電子メールまたはスコープにガベージ レターを追加すると、同じエラー メッセージが表示されます。明らかに何かがおかしいのですが、これをトラブルシューティングする方法がわかりません。
私が実行しているクライアントコードは次のとおりです(rails rspecファイル内):
client = Google::APIClient.new
key_file = '/Users/stu/projects/br/rails-app/######-privatekey.p12'
key = Google::APIClient::KeyUtils.load_from_pkcs12(key_file, 'notasecret')
Rails.logger.info "Private key? #{key.private?}"
asserter = Google::APIClient::JWTAsserter.new(
'#####-#######knp@developer.gserviceaccount.com',
"https://www.googleapis.com/auth/calendar",
key)
client.authorization = asserter.authorize()
私はかなり行き詰まっています。トラブルシューティングのアドバイスをいただければ幸いです。
ありがとう!
アップデート
ジャックのために機能するコードを共有していただきありがとうございます。
サイトの開発コンソールにアクセスして、サービス アカウント クライアントの p12 キーを作成しました。次に、サイトの管理コンソールに移動し、サイト全体の承認をカレンダー API に付与するクライアント ID を追加しました。
承認を追加した後の管理コンソールでは、XXXXXXXXXXXhnq.apps.googleusercontent.com Calendar (Read-Write) https://www.googleapis.com/auth/calendarのようになります。
p12 キーをダウンロードし、提供されたコード構造で使用しました。また、Steve Bazyl のプレゼンテーションからのアプローチも試しました。
asserter = Google::APIClient::JWTAsserter.new(
"XXXXXXXXXXX-hnq@developer.gserviceaccount.com",
"https://www.googleapis.com/auth/calendar",
key)
client.authorization = asserter.authorize("stu@XXXXXXXXXX.com")
どちらの場合も、以前と同じ出力が得られます。
Signet::AuthorizationError:
Authorization failed. Server message:
{
"error" : "invalid_grant"
}
「XXXXs://www.googleapis.com/auth/calendar」の代わりに「ジャンク」と入力すると、同じ出力が得られます。キーは有効であり、私が何か間違ったことをしていることは明らかですが、それが何であるかを知る方法について、API または Google で手がかりを見つけることができません。
トラブルシューティングのアイデアはありますか?