Hallo ich den Google OAuth 2 expliziten Fluss habe arbeitet nach:Google OAuth 2 impliziter Fluss auf iOS, Aktualisierungs-Token manuell
https://developers.google.com/identity/protocols/OAuth2WebServer
ich auch die impliziten Strömung habe auf iOS mit GIDSignIn arbeiten, speziell I Holen Sie sich den GIDSignInDelegate::sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!, withError error: Error!)
Rückruf und haben Zugriff auf user.authentication.accessToken
und user.authentication.refreshToken
.
Ich versuche, diese refreshToken
zurück zu unserem privaten App-Server, so dass es Anfragen im Namen des Benutzers (vor allem, weil es einfacher ist, nur mit dem SDK anmelden, als die Front-End-Entwickler mit rohen Umgang machen URL-Anfragen).
Allerdings, wenn ich versuche, die Aktualisierungs-Token zu verwenden, um einen neuen Zugriffstoken auf dem Back-End zu bekommen:
curl --request POST \
--url https://www.googleapis.com/oauth2/v4/token \
--header 'cache-control: no-cache' \
--header 'content-type: application/x-www-form-urlencoded' \
--data 'client_id={client_id}&client_secret={client_secret}&refresh_token={refresh_token}&grant_type=refresh_token'
Es gibt:
{ "error": "invalid_grant", "error_description": "Bad Request" }
ich glaube, das Problem ist, dass Mein Server hat eine Client-ID und einen geheimen Schlüssel, aber iOS hat nur eine Client-ID. Ohne ein Geheimnis (manchmal Schlüssel genannt), das der iOS-Client-ID entspricht, gibt es keine Möglichkeit für mich, das Token am Backend zu aktualisieren. Ich hatte die Hoffnung, dass Google erkennen würde, dass sowohl die Server-Client-ID als auch die iOS-Client-ID in derselben App registriert waren und der Server das Token mit seinen Anmeldeinformationen aktualisieren konnte, aber das funktioniert nicht.
Ich habe betrachtet sowohl die "API-Schlüssel" und "OAuth 2.0-Client-IDs" Abschnitte auf:
https://console.developers.google.com/apis/credentials
Aber bin ratlos.
Kennt jemand einen curl-Befehl zum Aktualisieren eines Tokens, das über das iOS SDK erworben wurde?
Oder ist das einfach nicht möglich?
Danke!