2017-12-11 1 views
10

현재이 기사에서 설명한대로 Google Api 크로스 클라이언트 인증을위한 웹 구성 요소를 개발 중입니다. 또한 https://developers.google.com/identity/protocols/CrossClientAuthGoogle 크로스 클라이언트 인증 및 잘못된 권한 오류

, 나는 레일과 인증 코드가 웹을 사용하여 안드로이드 응용 프로그램을 통해 얻을 수있다이 문서 https://developers.google.com/identity/protocols/OAuth2WebServer#handlingtheresponse

에 설명 된대로 내가 구글-API 클라이언트 보석을 사용하고있는 나는 환경 클라이언트 ID를 가져 와서 웹 API로 전달하여 교환해야합니다. 나는 또한 모든 경우에

auth_client = Google::APIClient::ClientSecrets.load("/path/to/client_secrets.json").to_ 
authorization 
auth_client.update!(
    :grant_type => 'authorization_code' 
) 
auth_client.code = code 
auth_client.fetch_access_token! 

일을 시도했습니다

auth_client = Google::APIClient::ClientSecrets.load("/path/to/client_secrets.json").to_ 
authorization 
auth_client.code = code 
auth_client.fetch_access_token! 

을 다음과 같이 교환에 보석 및 코드의 내 사용은 내가 더 설명이 구글에서 잘못된 부여 오류가 발생합니다.

필자는 curl 및 postman과 같은 다른 API 도구를 활용하고 google oauth 놀이터를 사용하여 보석을 우회하려고 URL을 구성하려고 시도했습니다.

유효하지 않은 승인 오류를 생성하는 방법에 대한 통찰력 또는 보석 외부의 Google과 토큰을 직접 교환하는 컬 요청 생성 방법에 대한 통찰력이 있으면 대단히 감사하겠습니다.

답변

0

글쎄, 아마도 당신이 찾고있는 해결책이 아니지만 응용 프로그램의 프론트 엔드에 JavaScript login API을 사용하고 보석 요청에 하드 코딩 된 params를 통해 백엔드에 토큰을 전달했습니다. 예 :

ga_view_ids = @service.list_account_summaries(options: {header: {authorization: "Bearer #{params[:access_token]}"}}).items 

가 올바른 방향 : 당신을 얻을 수 있도록 도와 희망은

1
{“error”: “invalid_grant”, “error_description”: “Bad Request”} 

일반적으로 사용자가 액세스를 요청하기 위해 사용하는 클라이언트 ID와 비밀에 사용 된 하나 없다는 것을 의미 문제의 코드를 작성하십시오.

android 앱의 자격증 명을 통한 인증 코드 요청은 동일한 자격 증명을 사용하여 인증되어야합니다. 이런 식으로 자격 증명을 섞어서 일치시킬 수는 없습니다.

웹 응용 프로그램에 자격 증명을 요청하면 안드로이드 응용 프로그램은 메모리가 작동하면 웹 자격 증명이 만든 새로 고침 토큰을 사용할 수 있어야합니다.

+0

Android 클라이언트는 인증 코드를 요청하기 위해 클라이언트 ID 만 필요로한다는 것을 알고 있습니다. 그렇다면 동일한 클라이언트 ID가 인증 코드를 요청하는 데 사용되고 있는지 확인하여이를 교환하는 데 사용됩니다. – rantingsonrails

+0

당신은 안드로이드에서 그것을 얻는다라고 말한다 tgen 웹에서 그것을 사용한다 당신은 그 웹을 할 수 없다. 그리고 안드로이드는 2 개의 완전히 다른 클라이언트 ID를 가지고 있고 그 다른 자격증 명을 비밀로한다. – DaImTo

+0

나는 여기에서 문서를 언급하고있다. https://developers.google.com/identity/protocols/CrossClientAuth#offlineAccess 필자는 안드로이드 클라이언트가 인증 코드를 얻기위한 매개 변수로 웹 클라이언트 ID를 전달한다는 것을 알고 있습니다. – rantingsonrails