2 Stimmen

Übergabe von OAUTH2-Tokens von iOS an Rails

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.

2voto

Agoln Punkte 774

Ich dachte, die URL, die ich oben verwendet habe, gäbe mir eine access token . In Wirklichkeit gibt sie mir eine authorization code (die dann verwendet werden kann, um eine access token ).

Die Lösung ist der Austausch des authorization code für eine access token dann kann ich den Token weitergeben und verwenden.

Der Unterschied zwischen einer authorization code und ein access token ist auf der Google-Website etwas vage, aber Sie können hier nachlesen, wie man sie austauscht: https://developers.google.com/accounts/docs/OAuth2WebServer

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X