Um die refresh_token
müssen Sie folgende Angaben machen access_type=offline
in der URL der OAuth-Anfrage. Wenn sich ein Benutzer zum ersten Mal authentifiziert, erhalten Sie einen Wert zurück, der nicht null ist refresh_token
sowie eine access_token
die abläuft.
Wenn Sie eine Situation haben, in der ein Nutzer ein Konto, für das Sie bereits ein Authentifizierungs-Token haben, erneut authentifizieren könnte (wie @SsjCosty oben erwähnt), müssen Sie von Google Informationen darüber zurückerhalten, für welches Konto das Token ist. Fügen Sie dazu Folgendes hinzu profile
zu Ihren Bereichen. Mit dem OAuth2 Ruby-Gem könnte Ihre endgültige Anfrage etwa so aussehen:
client = OAuth2::Client.new(
ENV["GOOGLE_CLIENT_ID"],
ENV["GOOGLE_CLIENT_SECRET"],
authorize_url: "https://accounts.google.com/o/oauth2/auth",
token_url: "https://accounts.google.com/o/oauth2/token"
)
# Configure authorization url
client.authorize_url(
scope: "https://www.googleapis.com/auth/analytics.readonly profile",
redirect_uri: callback_url,
access_type: "offline",
prompt: "select_account"
)
Beachten Sie, dass der Bereich zwei durch Leerzeichen getrennte Einträge hat, einen für den Nur-Lese-Zugriff auf Google Analytics, und der andere ist nur profile
der ein OpenID Connect-Standard ist.
Dies wird dazu führen, dass Google ein zusätzliches Attribut namens id_token
im get_token
Antwort. Um Informationen aus dem id_token zu erhalten, siehe diese Seite in den Google-Dokumenten. Es gibt eine Handvoll von Google bereitgestellter Bibliotheken, die dies für Sie validieren und "dekodieren" können (ich habe die Ruby google-id-token gem ). Sobald Sie es geparst haben, wird die sub
ist praktisch die eindeutige Google-Konto-ID.
Erwähnenswert ist, wenn Sie ändern den Bereich, erhalten Sie erneut ein Refresh-Token für Benutzer, die sich bereits mit dem ursprünglichen Bereich authentifiziert haben. Dies ist nützlich, wenn Sie z. B. bereits eine Reihe von Nutzern haben und nicht wollen, dass sie alle die Authentifizierung der App in Google aufheben.
Oh, und noch ein letzter Hinweis: Sie müssen nicht brauchen prompt=select_account
Es ist jedoch nützlich, wenn Sie eine Situation haben, in der sich Ihre Nutzer mit mehr als einem Google-Konto authentifizieren möchten (d. h. Sie verwenden dies nicht für die Anmeldung/Authentifizierung).