2017-12-11 1 views
10

Ich entwickle derzeit die Web-Komponente für Google API Cross Client-Autorisierung wie in diesem Artikel beschrieben. https://developers.google.com/identity/protocols/CrossClientAuthGoogle Cross Client Authorization und invalid_grant Fehler

Zusätzlich ist die Umgebung, die ich in bin, ist Rails und so verwende ich das Google-api-Client gem wie in diesem Artikel beschrieben https://developers.google.com/identity/protocols/OAuth2WebServer#handlingtheresponse

Der Autorisierungscode über den Android-App erhalten wird, über das Web Client-ID und wurde an die Web-API übergeben, um sie auszutauschen. Meine Verwendung des Edelstein- und Code zum Austausch ist als

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

folgt ich zusätzlich

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! 

tun In allen Fällen versucht habe ich erhalten einen ungültigen Zuschuss Fehler von Google ohne Beschreibung.

Ich habe versucht, die URLs zu konstruieren, um andere API-Tools wie Curl und Postman zu nutzen, und den Edelstein zu umgehen, mit dem Google OAUTH Spielplatz ohne Erfolg.

Irgendein Einblick in, was möglicherweise die ungültigen Gewährungsfehler erzeugt oder wie man die Drehungsanforderungen erzeugt, um das Zeichen direkt mit Google außerhalb des Edelsteins zu tauschen, würde sehr geschätzt werden.

Antwort

0

Nun, vielleicht ist nicht die Lösung, die Sie suchen, aber ich habe die JavaScript login API im Front-End der Anwendung und übergeben Sie das Token an das Back-End über Params, die in die Edelstein-Anfragen wie codiert ist dieses Beispiel:

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

Hoffe, es hilft Ihnen in die richtige Richtung zu bekommen :)

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

bedeutet normalerweise, dass der Client-ID und geheimen Sie verwenden Zugang zu beantragen ist nicht derjenige, der verwendet wurde, Erstellen Sie den betreffenden Code.

Die Autorisierungscodeanforderung über die Anmeldeinformationen von der Android-App muss mit den gleichen Anmeldeinformationen autorisiert werden. Sie können Anmeldeinformationen auf diese Weise nicht mischen und abgleichen.

Ich schlage vor, Sie haben Ihre Webanwendung fordern die Anmeldeinformationen die Android-App sollte in der Lage sein, die Aktualisierungstoken verwenden, die die Web-Anmeldeinformationen erstellt, wenn Speicher dient.

+0

Mein Verständnis ist, dass der Android-Client nur die Client-ID benötigt, um den Autorisierungscode anzufordern. Wenn dies der Fall ist, kann ich bestätigen, dass dieselbe Client-ID verwendet wird, um den Autorisierungscode anzufordern, wie er zum Austausch verwendet wird. – rantingsonrails

+0

Sie sagen, Sie erhalten es in Android tgen verwenden Sie es im Web können Sie nicht tun, dass Web und Android haben zwei völlig unterschiedliche Client-ID und Geheimnis seine verschiedenen Anmeldeinformationen – DaImTo

+0

Ich verweise die Dokumentation hier. https://developers.google.com/identity/protocols/CrossClientAuth#offlineAccess Ich verstehe, dass der Android-Client die Web-Client-ID als Parameter übergibt, um den Autorisierungscode zu erhalten. – rantingsonrails

Verwandte Themen