2017-10-12 4 views
1

ich ein Problem bin vor Konto in Bezug auf Aktionen auf Google Verknüpfung:Konto mit Aktionen auf Google Verknüpfung

Ich kann den Benutzer authentifizieren und Zugriff auf seine E-Mail-Adresse und die Benutzername aber danach, wie kann ich den Benutzer zurück umleiten an den Google Assistant und schließe den Browser, in dem er authentifiziert wurde?

Jede Hilfe wird geschätzt!

Update: Hey Prisoner, vielen Dank dafür. Ich habe getan, was Sie gesagt haben und yeah, jetzt wird es auf google.com umgeleitet, aber ohne result_code = SUCCESS, wenn ich es im Simulator teste.

Der Link lautet:

https://www.google.co.in/?gws_rd=cr&dcr=0&ei=z77fWbjQGIXxvATs_oqwBA 

Nun, wenn ich reden geben wieder ... es zeigt mir die Nachricht, die Sie Ihrem Konto verknüpfen müssen!

Im Gerät wird der Browser automatisch geschlossen und es zeigt SIGNING_IN aber wenn ich eine Absicht eintippe wird es nicht erkannt.

Es wäre toll, wenn Sie mir in die richtige Richtung zeigen könnten! (Ich bin mir nicht sicher, aber ich könnte auf dem Token Austausch Bühne sein, die Sie erwähnt haben, aber ich habe keine Ahnung, wie Sie vorgehen!)

Update 2: Wie angefordert der gesamte Fluss, den ich folge: Dies ist die URL, die ich von debuginfo erhalten:

https://assistant.google.com/services/auth/handoffs/auth/start?account_name=cha***@gmail.com&provider=***_dev&scopes=email&return_url=https://www.google.com/ 

Als ich das einfügen in den Browser auf die Genehmigung Endpunkt der Anforderung, die ich ist erhalten:

ImmutableMultiDict([ 
    ('response_type', 'code'), 
    ('client_id', ****.apps.googleusercontent.com'), 
    ('redirect_uri', 'https://oauth-redirect.googleusercontent.com/r/****'), 
    ('scope', 'email'), 
    ('state', ' CtcCQUxWM2ROU3hNMjl4LUItVXhQSGd4THRMLU4yNExnb3lYbGRKQnQwa3NwTVFva19NUWpYNE5jNGJURzIyZFN3RDBXd2d4enFGVWJGb0Q0ZW1vaS1OaFdkaHdhb05HZ2xlWTR6SllKVlRWYktwd09faklyUTVheFhQbGw2dmVKYzVFTk05N3B1QkxaZG41RVdHN0wyTktvRFdCYzFPVFBzM1dQUlFtN2RmM1VtRU4****(state)') 
]) 

die Antwort (redirect_url), dass ich zurückschicken :

https://accounts.google.com/o/oauth2/v2/auth?scope=email&response_type=code&redirect_uri=https%3A%2F%2F******.herokuapp.com%2Fcallback%2Fgoogle&client_id=****.apps.googleusercontent.com 

Wenn es mein Endpunkt erreicht wieder die Anfrage Argumente sind:

ImmutableMultiDict([ 
    ('code', '4/***********') 
]) 

Jetzt kann ich die E-Mail-Adresse für den Zugriff auf und andere Details

Die URL, die ich von hier umleiten:

https://oauth-redirect.googleusercontent.com/r/****?code=abcdefgh&state=CtcCQUxWM2ROU3hNMjl4LUItVXhQSGd4THRMLU4yNExnb3lYbGRKQnQwa3NwTVFva19NUWpYNE5jNGJURzIyZFN3RDBXd2d4enFGVWJGb0Q0ZW1vaS1OaFdkaHdhb05HZ2xlWTR6SllKVlRWYktwd09faklyUTVheFhQbGw2dmVKYzVFTk05N3B1QkxaZG41RVdHN0wyTktvRFdCYzFPVFBzM1dQUlFtN2RmM1VtRU4****(state) 

Diese leitet mich an:

https://www.google.co.in/?gws_rd=cr&dcr=0&ei=5c_fWdfKNYndvASO7o6ACA 

Bearbeiten 3: überprüfte ich die Netzwerkprotokolle:

result_code=FAILURE&result_message=Account+linking+failed 

ich auch als Token-URL in AoG hinzugefügt/Token/Google. Es wird in heroku erkannt, aber ich erhalte diese Anfrage nie in meinem Code.

Anmerkung: Ich Python Kolben verwenden und Hosting meine app auf Heroku

+0

Können Sie die Frage aktualisieren, um die URL zu zeigen, dass Sie von Google zu bekommen? (Ausblenden Sie Dinge wie die client_id, Ihre Projekt-ID aus der Weiterleitung und alle Parameterwerte, die im Namen "secret" haben.) Lassen Sie uns sicherstellen, dass wir die Anfrage bekommen, von der wir glauben, dass wir sie bekommen. Bitte geben Sie auch die URL an, auf die Sie weiterleiten (wiederum die Projekt-ID maskieren). – Prisoner

+0

Hey Prisoner aktualisiert wie gewünscht. Lassen Sie mich wissen, wenn Sie weitere Erläuterungen benötigen! – charlie

Antwort

2

Sobald Sie den Benutzer authentifiziert haben, müssen Sie einen temporären Auth-Code zurück zu Google zurückzukehren. Später wird Google diesen Authentifizierungscode für ein Zugriffstoken und ein Aktualisierungstoken austauschen, aber Sie sind noch nicht dort. Der wichtige Teil ist, dass dieser Code einzigartig sein muss und dass Sie später erkennen können, für welchen Benutzer er bestimmt ist.Der Code sollte für eine begrenzte Zeit gültig sein - 10 Minuten sind ein allgemein akzeptierter Zeitrahmen.

In der Anfrage, die Google Ihnen als Teil der Anmeldung gesendet hat, haben sie eine redirect_uri und eine state als Parameter angegeben. Sie müssen diese in Ihrer Antwort verwenden. (state kann alles sein - Sie sollten sich nicht darum kümmern, was es ist, Sie werden es nur mit Ihrer Weiterleitung zurückschicken. Sein Zweck ist es, die Sicherheit durch Replay-Angriffe zu verhindern.)

Überprüfen Sie, dass die redirect_uri hat

Form
https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID 

Wo YOUR_PROJECT_ID ist ... Sie ahnen es, die ID des Projekts. Sie finden dies in der Cloud-Konsole.

Sie werden dann den Benutzer auf diese URL mit einigen zusätzlichen Parameter umleiten:

https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID?code=AUTHORIZATION_CODE&state=STATE_STRING 

Wo YOUR_PROJECT_ID wie oben erwähnt ist, AUTHORIZATION_CODE ist der Code, den Sie erzeugt haben, und STATE_STRING ist der Wert des state Parameter, den Sie in der Anfrage gesendet haben.

Einzelheiten können Sie sehen https://developers.google.com/actions/identity/oauth2-code-flow#handle_user_sign-in

Verwandte Themen