2011-09-06 8 views
17

Sto eseguendo un semplice reindirizzamento dopo aver chiamato OAuth2 :: retrieveAccessToken() con Play Framework. Sto avendo personaggi divertenti aggiunti alla URL che non ho mai messo lì, quindi il risultato finale è il seguente:Play Framework aggiunge # _ = _ per reindirizzare dopo l'autenticazione di Facebook tramite OAuth2?

http://localhost:9000/#_=_

Dove diavolo fa il # _ = _ provengono da? Ecco la mia definizione della rotta dal file rotte:

GET/Application.index

Ecco il frammento di codice del controller che fare con l'autenticazione Facebook:

public static void facebookConnect() { 
    OAuth2 facebook = new OAuth2(
     "https://graph.facebook.com/oauth/authorize", 
     "https://graph.facebook.com/oauth/access_token", 
     "2#############6", 
     "c##############################2" 
    ); 

    if(OAuth2.isCodeResponse()) { 
     OAuth2.Response oauthResponse = facebook.retrieveAccessToken(facebookAuthUrl()); 
     if(oauthResponse.error == null) { 
      //... Somewhere here, something is causing #_=_ to be appended to the URL? 
      Application.index(); 
     } 
    } 
    facebook.retrieveVerificationCode(facebookAuthUrl()); 
} 

EDIT:

Secondo lo this page, Facebook ha recentemente modificato la propria API per includere lo = se request_uri è vuoto, il problema è ... my request_uri è stato impostato in modo esplicito?

+0

Ho appena provato a eseguire l'esempio di facebook-oauth2 fornito con il download di Play Framework e fa esattamente lo stesso, aggiungendo # _ = _ dopo il reindirizzamento. –

+1

Aggiungere il seguente al tag head per risolvere questo problema: ' ' –

+0

Ho creato un bug su questo problema: http://bugs.developers.facebook.net/show_bug.cgi?id=20504 – kipusoep

risposta

21

Questo è stato aggiunto dopo un aggiornamento della protezione.

Dal Facebook developer blog:

Variazione sessione di reindirizzamento Comportamento

Questa settimana, abbiamo iniziato l'aggiunta di un frammento #_=_ al redirect_uri quando questo campo viene lasciato vuoto. Assicurati che la tua app sia in grado di gestire questo comportamento con .

+1

Descrizione della vulnerabilità della sicurezza che hanno risolto con questo: https://nealpoole.com/blog/2011/08/lessons-from-facebooks-security-bug-bounty-program/ –

1

Forse questi caratteri provengono dal callback di facebook. Ero un callback FB come

localhost:9000?someparams#code=verylongcodefromfacebook 

ho potuto sbarazzarsi del # semplicemente sanificazione i params prima di richiedere il token di accesso.

+0

L'unico set di parametri è "codice" necessario per retrieveAccessToken, se viene toccato, retrieveAccessToken avrà esito negativo. –