Hoe de omleiding te detecteren om toegang te krijgen via java

Ik begin met het gebruik van de Facebook Graph API en ik ga een toegangstoken ophalen met enkele eenvoudige HTTP-verzoeken via java.

Volg https://developers.facebook.com/docs/authentication/ Ik heb een nieuwe app gemaakt, maar ik heb geen domein dus Ik doe een HTTP-verzoek aan

www.facebook.com/dialog/oauth?client_id=YOUR_APP_ID&
redirect_uri=https://www.facebook.com/connect/login_success.html

voor een server-side flow, en ik veronderstel dat ik omgeleid word naar een succespagina met een code in de URL. Dan zou ik deze code gebruiken om een ​​ander HTTP-verzoek aan te maken

graph.facebook.com/oauth/access_token? client_id=YOUR_APP_ID&redirect_uri=YOUR_URL& client_secret=YOUR_APP_SECRET&code=THE_CODE_FROM_ABOVE

en eindelijk mijn toegangstoken krijgen.

Ik gebruikte zowel java.net.HttpURLConnection en org.apache.http.HttpResponse , maar in beide gevallen, het uitvoeren van de eerste oproep krijg ik als antwoord de HTML van een Facebook-inlogpagina.

Als ik deze HTML gebruik om een ​​webpagina te maken, klik ik gewoon op de knop Inloggen (zonder gebruikersnaam en wachtwoord in te voegen). Ik krijg de succespagina met de code!

In de HTML is het veld submit van de knop Login leeg en kan ik geen omleidings-URL's ophalen ... Ik kan gewoon een alternatieve link lezen in de <meta> -tag die een auth_token genereren (wat is Het is heel anders met een normaal toegangspunt ...).

Dus wat ik vraag is:

  1. het is mogelijk om de verborgen omleiding op de een of andere manier te detecteren gebruik van java.net.HttpURLConnection of org.apache.http.HttpRespons e?

  2. zo ja, hoe is het mechanisme? Is het gerelateerd aan de auth_token ?

  3. zo nee, is dit mogelijk met andere bibliotheken? (Ik gebruikte ook restfb, maar ze lijken te vereisen dat een toegangstoken "met de hand" wordt ingevoegd als een arg, en ik zag ook facebook-java-api maar het lijkt oud).


Ook als ik op Facebook ingelogd ben en de eerste HTTP-oproep via Java uitvoer, krijg ik als antwoord de HTML van een Facebook-inlogpagina.

Gebruik HTML om een ​​webpagina te maken en klik vervolgens op de knop Inloggen (zonder gebruikersnaam en wachtwoord in te voegen). Ik krijg de pagina success.htm met de parameter code in de URL.

Als ik de originele URL rechtstreeks in mijn browser gebruik, kan ik direct de pagina success.htm verkrijgen zonder passages in het midden.

Dus ik neem aan dat het probleem ligt in het beheer van cookies: in Java (uitgevoerd in Eclipse) heb ik geen toegang tot de cookies van mijn browser.

Ik probeerde om te leiden om een ​​Servlet te gebruiken, maar ik krijg de foutmelding over het domein: ServletURL is geen Facebook-domein of een "site-URL" geregistreerd voor mijn app (eigenlijk heb ik geen site-URL ingesteld voor mijn app ... en dat is de probleemkern).

In any case here http://developers.facebook.com/docs/authentication/ in the section App types > Desktop apps they say:

[...] Nadat de gebruiker uw app heeft geautoriseerd [ik heb alles toegestaan], wij   omleiden van de gebruiker terug naar de redirect_uri met het toegangsteken in   het URI-fragment: [...]

     

Detecteer deze omleiding en lees vervolgens het toegangstoken uit de URI   gebruik maken van de mechanismen die worden geboden door uw raamwerk van keuze. [...]

Dus ik denk dat het nog steeds mogelijk is om deze omleiding via Java te detecteren. Hoe?

0
Dank u bij voorbaat!
toegevoegd de auteur Rawton Evolekam, de bron

1 antwoord

Als u nog geen domein heeft, raad ik u aan om localhost als een domein te gebruiken. Op die manier kunt u het testen op uw lokale webserver/lokale app.

Het gebruik van HttpURLConnection werkt goed. Dit is hoe we het doen.

Redirect to: 
"https://graph.facebook.com/oauth/authorize?" +
            "client_id=" + clientId + "&" +
            "redirect_uri=" + URLEncoder.encode(returnUrl, "utf-8") 
// After redirect to the return url do the following:

//Make a http request to 
"https://graph.facebook.com/oauth/access_token?client_id=" +
            "client_id=" + clientId + "&" +
            "redirect_uri=" + URLEncoder.encode(returnUrl, "utf-8")  + "&"+
            "client_secret=" + clientSecret + "&"+
            "code=" + request.getParameter("code");

Hiermee wordt een toegangstoken geretourneerd waarmee u op facebook kunt zoeken

2
toegevoegd
u kunt een upvote/acceptatie doen als dit het juiste antwoord is
toegevoegd de auteur jontro, de bron
OK! Dank u zeer! Ik loste het probleem op met het bewerken van de basisinstellingen van mijn app en het instellen van " localhost: 8080 & quot ; als website. Nu kan ik code ophalen en access_token met behulp van een Servlet. Dus ik denk dat het niet mogelijk is om het access_token te verkrijgen zonder alleen java.net.HttpURLConnection (of org.apache.http.HttpResponse) en facebook.com/connect/login_success.html als omleidings-URI.
toegevoegd de auteur Rawton Evolekam, de bron