Ich habe eine Rails-Website, die Google OAUTH2 implementiert hat und funktioniert.
Wir entwickeln eine iOS-App, die über APIs mit meinem Webserver kommunizieren soll. Für einige der APIs muss der Benutzer authentifiziert werden. Die Idee ist, dass die iOS-App den Benutzer mit OAUTH2 auf dem Gerät authentifiziert und dann das Token als Authentifizierung über SSL vom Gerät an das Web sendet. Die Website muss das Token verifizieren.
In der Google API-Konsole fügte ich die Client-ID für das iPhone-Gerät hinzu und erhielt ein Zugriffstoken, indem ich zu ging:
https://accounts.google.com/o/oauth2/auth?
scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email&
redirect_uri=urn:ietf:wg:oauth:2.0:oob&
response_type=code&
client_id={my client id}
Dann gebe ich das Token an meine Website weiter. Auf meiner Website validiere ich das Token über:
google = OmniAuth::Strategies::GoogleOauth2.new(ENV['GOOGLE_API_KEY'],['GOOGLE_CLIENT_API_SECRET'])
client = OAuth2::Client.new(ENV['GOOGLE_API_KEY'],['GOOGLE_CLIENT_API_SECRET'], google.options.client_options)
access_token = OAuth2::AccessToken.new(client, params[:token], google.options.access_token_options || {})
google.access_token = access_token
google.auth_hash
Wenn ich versuche auth_hash
wird der folgende Fehler zurückgegeben:
{
"error": {
"errors": [
{
"domain": "global",
"reason": "authError",
"message": "Invalid Credentials",
"locationType": "header",
"location": "Authorization"
}
],
"code": 401,
"message": "Invalid Credentials"
}
}
Von hier aus habe ich keine Ahnung, warum ich ungültige Anmeldedaten angegeben habe.
ENV['GOOGLE_API_KEY']
auf denselben API-Schlüssel wie die Website verweist, und ENV['GOOGLE_CLIENT_API_SECRET']
verweist auf das Geheimnis für den iOS-Client.