私はサービス アカウントを持っており、OAuth2 gem をGoogle API Ruby Clientと一緒に使用しています。
require 'oauth2'
require 'google/api_client'
私の目的は、特定のユーザーのアカウントへのアクセスを許可し、それ以外のアクセスを許可しないアクセス トークンを取得することです。これは、HTTP を使用する場合はパラメーターを使用して実現されることが多いと思いますがsub
、上記の Ruby クライアント ライブラリを使用してこれを行うにはどうすればよいでしょうか?
アクセス トークンを正常に取得し、それを使用してドライブ v2 ファイル リスト API にアクセスできます。応答には常に「ドライブの使用方法」ドキュメントが 1 つ表示され、それ以外は表示されません。
ユーザーになりすます試みが成功しなかったと思われます。sub
基本的に、以下の関数のオプションとしてメールアドレスを渡しています。
client = Google::APIClient.new(...)
access_token = OAuth2::AccessToken.new(oauth2_client, client.authorization.access_token, {‘sub’ => ‘user@domain.com’} )
おそらく、それはこれを行う方法ではありません。
1 人のユーザーを偽装し、他のユーザーを偽装しないアクセスを許可する範囲のアクセス トークンを取得するにはどうすればよいですか?
Steve のコメントに従って、私は intridea Gem を削除し、現在は Signet を使用しています。もう少し進みますが、:person を指定すると access_denied エラーが発生して行き詰まります。それがなくても認証できますが、明らかに発行者としてアクセスできます。
require 'google/api_client'
...
client = Google::APIClient.new(:application_name => application_name, :application_version => application_version)
...
opts = {
:token_credential_uri => 'https://accounts.google.com/o/oauth2/token',
:audience => 'https://accounts.google.com/o/oauth2/token',
:scope => scope,
:issuer => service_account_email_address,
:signing_key => key,
:person => 'my.email@address.com'
})
client.authorization = Signet::OAuth2::Client.new(opts)
access_token = client.authorization.fetch_access_token!
...
>> client.authorization.fetch_access_token!
Signet::AuthorizationError: Authorization failed. Server message:
{
"error" : "access_denied",
"error_description" : "Requested client not authorized."
}
「テスト インストール フロー」を実行するコンソール プロジェクトがありますが、クライアントが信頼されていないようです。私はどこを見ますか?
ありがとう。