나는 서비스 계정을 가지고 있고 나는 Google API Ruby Client와 함께 OAuth2를 보석을 사용하고 있습니다 :서비스 계정 (Ruby 클라이언트)을 사용하여 가장하도록 Google API 사용자를 설정하는 방법은 무엇입니까?
require 'oauth2'
require 'google/api_client'
내 목표는 특정 사용자의 계정과 다른 액세스를 허용하는 액세스 토큰을 가져올 것입니다. 나는 이것이 종종 HTTP를 사용할 때 sub
매개 변수를 사용하여 달성된다고 생각하지만 위의 Ruby 클라이언트 라이브러리를 사용하여 어떻게해야합니까?
액세스 토큰을 성공적으로 가져 와서 드라이브 v2 파일 목록 API에 액세스 할 수 있습니다. 나는 항상 하나의 "드라이브로 시작하는 법"문서를 응답에서 볼 수 있으며 다른 문서는 볼 수 없다.
사용자를 가장하려고 시도한 것이 성공적이지 않은 것 같습니다. 기본적으로 나는 아래의 함수에 sub
옵션으로 전자 메일 주소를 전달 해요 :
client = Google::APIClient.new(...)
access_token = OAuth2::AccessToken.new(oauth2_client, client.authorization.access_token, {‘sub’ => ‘[email protected]’})
것은 아마도 그것은이 작업을 수행하는 방법이 아니다.
단일 사용자로 위장하는 액세스를 허용하고 다른 사용자는 액세스 토큰을 검색하는 방법은 무엇입니까?
Steve의 의견에 따라 보석을 삭제했으며 현재 Signet을 사용 중입니다. 나는 좀 더 나아졌지만 a : 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 => '[email protected]'
})
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."
}
'테스트 설치 흐름'을 수행하지만 클라이언트가 신뢰할 수없는 것으로 보이는 콘솔 프로젝트가 있습니다. 어디서 봤어?
감사합니다.
귀하의 솔루션은 Signet 사용 권한을 부여하는 방법에 대한이 질문의 답과 비슷합니까? http://stackoverflow.com/questions/18468655/trouble-with-google-apps-api-and-service-accounts-in-ruby – mmcrae
예. 기본적으로 Signet을 사용하십시오. –