Die Authentifizierung mit OAuth2 auf iOS
Ich bin derzeit versuchen zu autorisieren mein Benutzer mit OAuth2. Ich bin derzeit mit den folgenden Bibliotheken: https://github.com/p2/OAuth2
let oauth2 = OAuth2CodeGrant(settings: [
"client_id": "my-id",
"authorize_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://www.googleapis.com/oauth2/v3/token",
"scope": "profile", //depends on the API you use
"redirect_uris": ["com.TestAuthorizeApp:/oauth2Callback"],
])
//let oauth2 = OAuth2CodeGrant(settings: settings)
oauth2.onAuthorize = { parameters in
print("Did authorize with parameters: \(parameters)")
}
oauth2.onFailure = { error in //`error` is nil on cancel
if let error = error {
print("Authorization went wrong: \(error)")
}
}
oauth2.authConfig.authorizeEmbedded = false
oauth2.authorize()
Wenn ich diesen starte, lädt es bis google in die browser und ich bin in der Lage, um sich anzumelden. Es fragt mich dann über die Berechtigungen, die ich erklärt haben, in der Umfang und das funktioniert auch. Ich klicken Sie auf ok, öffnen Sie und leitet es mich zurück zu meiner app.
Jedoch wenn ich diesen code ausführen wieder ich erwarte, dass das access-token gespeichert wurde in der Schlüssel-Kette. Allerdings scheint dies nicht zu funktionieren.
Habe ich schaute in den Quellcode und fand das folgende überprüfen: tryToObtainAccessTokenIfNeeded
welche immer false zurückgibt. Dies bedeutet, bekomme ich die Seite wo ich immer wieder müssen Sie auf 'Erlauben'.
Ich Frage mich, wenn mir jemand helfen könnte herauszufinden, warum es nicht speichern alles, was in der keychain. Auch bedeutet dies, dass der Benutzer nicht wirklich authentifiziert werden?
Dank.
===
Bearbeiten
Hinzugefügt haben oauth2.verbose = true
als pro Pascal ' s Kommentar. Ich bekomme die folgende Ausgabe.
OAuth2: Looking for items in keychain
OAuth2: No access token, maybe I can refresh
OAuth2: I don't have a refresh token, not trying to refresh
Das ist, was ich dachte, was passiert war. Jedoch bin ich immer noch nicht, warum es nicht speichern /finden alles, was in der keychain.
=====
Edit 2
Es stellt sich heraus, dass ich nicht wirklich ein access-token zurück an alle. Bitte sehen Sie sich dieses Gespräch: https://github.com/p2/OAuth2/issues/109 und unten meine Antwort.
- Set
oauth2.verbose = true
auf Ihre OAuth2-Instanz und den log posten, es sollte Ihnen sagen, was es tut, mit dem Schlüsselbund.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Mit Hilfe von Pascal hier: https://github.com/p2/OAuth2/issues/109 ich habe es geschafft es zum laufen zu bringen. Stellt sich heraus, dass ich nicht die Umsetzung Schritt: '3 Autorisieren der Benutzer', wie ich hätte sein sollen.
So dass eine vollständige Lösung ist:
In meinem view controller habe ich Folgendes:
Den obigen code behandeln soll, senden Sie die google-web-Seite, wo Sie sich anmelden können, und klicken Sie dann auf zulassen.
Nun müssen Sie behandeln die Rückgabe der app in den app delegate:
Hoffentlich wird dies helfen, jemand anderes, die möglicherweise Probleme mit dem Versuch, eine access-token.