2017-02-07 32 views
0

Ich habe eine Klasse, die bereits funktioniert mit der Dropbox API Hochladen von Dateien, Herunterladen, Löschen und so weiter getan. Es hat recht gut funktioniert, da ich nur mein eigenes Zugriffs-Token verwendet habe, aber ich muss andere Benutzer registrieren und ein einziges, aber "großes" Problem trat auf: Abruf des Token.Grabbox Dropbox Access-Token auf Windows Form mit Dropbox-API

1.- Redirect URI? Ich fange an zu zweifeln, warum ich das brauche. Ich habe schließlich diese URI (https://www.dropbox.com/1/oauth2/redirect_receiver) verwendet, weil "The redirect URI you use doesn't really matter" Natürlich habe ich dieses in meiner App-Konfiguration auf Dropbox aufgenommen.

2.- ich das Konto des Benutzers erreichen (kann ich die Zählung des Benutzers sehen erhöht, und ich sehe die App Zugriff hat auf das Konto des Benutzers.

3.- Ich habe einen Haltepunkt in meinem Code die Variablen zu inspizieren um dort die DropboxOAuth2Helper.ParseTokenFragment aber ich habe keinen Erfolg anwenden

Dies ist mein Code, aber auf die, wenn sie vor der try-catch ist, wo es klemmt.

string AccessToken; 
const string AppKey = "theOneAtmyAppConfigOnDropbox"; 
const string redirectUrl = "https://www.dropbox.com/1/oauth2/redirect_receiver"; 
string oauthUrl = 
    [email protected]"https://www.dropbox.com/1/oauth2/authorize?response_type=token&redirect_uri={redirectUrl}&client_id={AppKey}"; 

private string oauth2State; 
private bool Result; 

public Form1() 
{ 
    InitializeComponent(); 
} 

private void Form1_Load(object sender, EventArgs e) 
{ 
    Start(AppKey, webBrowser1); 

    webBrowser1.Navigating += Browser_Navigating; 
} 

private void Start(string appKey, WebBrowser w) 
{ 
    this.oauth2State = Guid.NewGuid().ToString("N"); 
    Uri authorizeUri = DropboxOAuth2Helper.GetAuthorizeUri(OauthResponseType.Token, appKey, redirectUrl, state: oauth2State); 
    w.Navigate(authorizeUri); 
} 

private void Browser_Navigating(object sender, WebBrowserNavigatingEventArgs e) 
{ 
    if (!e.Url.ToString().StartsWith(redirectUrl, StringComparison.InvariantCultureIgnoreCase)) 
    { 

     // we need to ignore all navigation that isn't to the redirect uri. 
     return; 
    } 

    try 
    { 
     OAuth2Response result = DropboxOAuth2Helper.ParseTokenFragment(e.Url); 
     if (result.State != this.oauth2State) 
     { 
      // The state in the response doesn't match the state in the request. 
      return; 
     } 

     this.AccessToken = result.AccessToken; 
     this.Result = true; 
    } 
    catch (ArgumentException) 
    { 
     // There was an error in the URI passed to ParseTokenFragment 
    } 
    finally 
    { 
     e.Cancel = true; 
     this.Close(); 
    } 
} 

I‘ habe gewesen stundenlang dagegen anzukämpfen und ich fange an, die Dinge an diesem Punkt ein wenig bewölkt zu sehen.

This ist das Tutorial, das ich verwendet habe, aber ich gehe nicht vorwärts. Ich würde wirklich jede Hilfe schätzen!

EDIT: Ich habe endlich ein paar Schritte nach vorne gemacht. Ich habe die Zeile geändert, die enthält

Uri authorizeUri2 = DropboxOAuth2Helper.GetAuthorizeUri(appKey); 

Jetzt zeige ich das generierte Zugriffstoken auf dem WebClient! Schlechtes Teil kommt, wenn man versucht es zu bekommen (es kommt in das if) und es wird jedes Mal erzeugt, wenn ich den Benutzer um Erlaubnis frage, so dass es überschrieben wird.

EDIT 2: Ich habe festgestellt, dass das Token, das ich im Browser erzeugt habe, irgendwie fehlerhaft ist. Ich versuche, manuell zu ändern, es hardcored, wenn ich das Debuggen und ich eine Ausnahme erhalten, wenn ein AuthException wenn das DropboxClient Objekt erstellen :(Was zum Teufel!

+0

[Cross-Linking als Referenz: https: //www.dropboxforum .com/t5/API-Unterstützung/Probleme mit dem Zugriff auf Token von einem Benutzer auf Windows/mp/205702 # M9950] – Greg

Antwort

0

Wie Greg erwähnt, wurde die Lösung das Ereignis mit Browser_Navigated. Sieht aus wie die Version des eingebetteten IE, die Visual Studio (2015) verwendet, hat nicht bemerkt, dass, wenn es eine Weiterleitung ist, es das Ereignis BrowserNavigating nicht starten wird