Ich hätte gerne eine dynamische Weiterleitungs-URL für meine Facebook OAuth2-Integration. Wenn meine Weiterleitungs-URL beispielsweise in meiner Facebook-App wie folgt lautet:
http://www.mysite.com/oauth_callback?foo=bar
Ich möchte, dass die Umleitungs-URL für eine bestimmte Anforderung ungefähr so lautet, damit ich auf dem Server einen Kontext zur Verarbeitung des Authentifizierungscodes habe:
http://www.mysite.com/oauth_callback?foo=bar&user=6234
Meine Weiterleitung wird aufgerufen, nachdem der Autorisierungsdialog gesendet wurde, und ich erhalte einen Authentifizierungscode zurück. Wenn ich jedoch versuche, mein Zugriffstoken abzurufen, wird von OA ein OAuthException-Fehler zurückgegeben. Meine Anfrage sieht folgendermaßen aus (Zeilenumbrüche wurden aus Gründen der Übersichtlichkeit hinzugefügt):
https://graph.facebook.com/oauth/access_token client_id = MY_CLIENT_ID & redirect_uri = http% 3A% 2F% 2Fwww.mysite.com% 2Foauth_callback% 3Ffoo% 3Dbar% 26user% 3D6234 & client_secret = MY_SECRET & code = RECEIVED_CODE
Alle meine Parameter sind URL-codiert und der Code sieht gültig aus. Ich vermute also nur, dass der Problemparameter mein redirect_uri ist. Ich habe versucht redirect_uri
, alle folgenden Einstellungen vorzunehmen, ohne Erfolg:
- Die tatsächliche URL der Anfrage an meine Site
- Die URL der Anfrage an meine Site abzüglich des
code
Parameters - Die in der Konfiguration meiner Facebook-Anwendung angegebene URL
Werden benutzerdefinierte Umleitungs-URI-Parameter unterstützt? Wenn ja, gebe ich sie richtig an? Wenn nicht, werde ich gezwungen sein, ein Cookie zu setzen, oder gibt es ein besseres Muster für die Bereitstellung von Kontext für meine Website?
quelle
Wenn Sie aus irgendeinem Grund die von Jacob vorgeschlagene Option nicht verwenden können, können Sie Ihren
redirect_uri
Parameter vor dem Übergeben urlencodieren , und er funktioniert auch mit einem vollständigen Querystring wie demfoo=bar&morefoo=morebar
darin enthaltenen.quelle
state
ist es für mich die Lösung, den Parameter sowohl für den XSRF-Schutz als auch für meine eigene ID zu "teilen" .Ich habe nach diesem Tutorial versucht, einen Facebook-Anmelde-Workflow für API v2.9 zu implementieren . Ich habe die oben beschriebenen Lösungen ausprobiert. Manuels Antwort ist irgendwie richtig, aber ich habe festgestellt, dass keine URL-Codierung erforderlich ist. Außerdem können Sie nur einen Parameter übergeben. Es wird nur der erste Abfrageparameter berücksichtigt, der Rest wird ignoriert. Hier ist ein Beispiel,
Fordern Sie einen Code über an
https://www.facebook.com/v2.9/dialog/oauth?client_id={app-id}&redirect_uri=http://{url}/login-redirect?myExtraParameter={some-value}
Sie würden einen Rückruf für Ihre URL erhalten. Es wird so aussehen
http://{url}/login-redirect?code={code-from-facebook}&myExtraParameter={value-passed-in-step-1}
. Beachten Sie, dass Facebook mit einen Rückruf tätigen würdemyExtraParameter
. Sie können den Wert fürmyExtraParameter
aus der Rückruf-URL extrahieren .Dann können Sie Zugriffstoken mit anfordern
https://graph.facebook.com/v2.9/oauth/access_token?client_id={app-id}&client_secret={app-secret}&code={code-from-facebook}&redirect_uri=http://{url}/login-redirect?myExtraParameter={value-extracted-in-step-2}
Zusätzlicher Parameter, der in Schritt 1 nach dem ersten Abfrageparameter übergeben wurde, wird ignoriert. Vergewissern Sie sich auch nicht enthalten ungültige Zeichen in der Abfrage - Parameter (siehe diese für weitere Informationen).
quelle
redirect_uri
. Es ist nicht gültig, eine nicht codierte Sekunde?
in der URL oder&
s zu haben, da dies die Parameterliste mehrdeutig macht. Wenn Sie eine URL-Codierung durchführen, müssen Sie sich nicht darum kümmern, "ungültige Zeichen" im Parameter zu vermeiden. Ihre zusätzlichen Parameter werden wahrscheinlich aufgrund Ihrer fehlenden Codierung "ignoriert"&
(wie könnte es unterscheiden, ob es sich um ein Parametertrennzeichen oder einen Teil davon handeltcallback_uri
?)Client OAuth Settings
hinzugefügt, ohne zusätzliche Parameter hinzuzufügen. Es funktioniert nicht in meinem FallURL Blocked: This redirect failed because the redirect URI is not whitelisted in the app’s Client OAuth Settings. Make sure Client and Web OAuth Login are on and add all your app domains as Valid OAuth Redirect URIs.
Sie sollten Ihren benutzerdefinierten
state
Parameter mithilfe des Anmeldehilfsprogramms als solches festlegen :use Facebook\Facebook; use Illuminate\Support\Str; $fb = new Facebook([ 'app_id' => env('FB_APP_ID'), 'app_secret' => env('FB_APP_SECRET'), 'default_graph_version' => env('FB_APP_VER'), ]); $helper = $fb->getRedirectLoginHelper(); $permissions = [ 'public_profile', 'user_link', 'email', 'read_insights', 'pages_show_list', 'instagram_basic', 'instagram_manage_insights', 'manage_pages' ]; $random = Str::random(20); $OAuth2Client = $fb->getOAuth2Client(); $redirectLoginHelper = $fb->getRedirectLoginHelper(); $persistentDataHandler = $redirectLoginHelper->getPersistentDataHandler(); $persistentDataHandler->set('state', $random); $loginUrl = $OAuth2Client->getAuthorizationUrl( url('/') . '/auth/facebook', $random, $permissions );
quelle
Hey, wenn Sie offizielle Facebook PHP SKD verwenden, können Sie benutzerdefinierte
state
Parameter wie diese einstellenquelle
Sie sind am besten aus einem einzigartigen Rückruf für jeden oAuth Anbieter Angabe
/oauth/facebook
,/oauth/twitter
usw.Wenn Sie wirklich möchten, dass dieselbe Datei auf alle oAuth-Anforderungen reagiert, fügen Sie sie entweder in die einzelnen Dateien ein oder richten Sie einen Pfad ein, der dieselbe Datei auf Ihrem Server mithilfe von .htaccess-Weiterleitungen oder ähnlichem aufruft:
/oauth/*
>oauth_callback.ext
quelle