2017-02-07 13 views
0

Я сделал класс, который уже работает с Dropbox API, загружая файлы, загружая их, удаляя и т. Д. Он работает очень хорошо, так как я просто использовал свой токен доступа, но мне нужно зарегистрировать других пользователей, и появилась одна, но «большая» проблема: извлечение токена доступа.Grabbing Accessken token на Windows Form с использованием Dropbox API

1.- Перенаправление URI? Я начинаю сомневаться, зачем мне это нужно. Я, наконец, использовал этот URI (https://www.dropbox.com/1/oauth2/redirect_receiver), потому что "The redirect URI you use doesn't really matter" Конечно, я включил этот вариант в свою конфигурацию приложения на Dropbox.

2.- Я достигаю учетную запись пользователя (я могу видеть счетчик пользователя увеличивается, и я вижу, что приложение имеет доступ к учетной записи пользователя.

3.- У меня есть точки останова на мой код, чтобы инспектировать переменные для того, чтобы применить DropboxOAuth2Helper.ParseTokenFragment но у меня нет никакого успеха на есть

Это мой код, но на если раньше попытка поймать, где он застревает:.

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(); 
    } 
} 

Я был борясь против этого часами, и я начинаю видеть, что сейчас немного облачно.

This - это учебник, который я использовал, но я не продвигаюсь вперед. Я бы очень признателен за любую помощь!

EDIT: Я, наконец, сделал несколько шагов вперед. Я изменил строку, которая содержит

Uri authorizeUri2 = DropboxOAuth2Helper.GetAuthorizeUri(appKey); 

Теперь я показываю сгенерированный токен доступа на веб-клиенте! Плохая часть при попытке получить ее (она попадает внутрь if), и она генерируется каждый раз, когда я прошу пользователя получить разрешение, поэтому она перезаписывается.

EDIT 2: Я заметил, что токен, который я генерировал в браузере, как-то искажен. Я пытаюсь вручную изменить его hardcored, когда я отладки и я получаю исключение, когда AuthException при создании объекта DropboxClient :(Что за черт!

+0

[Перекрестная ссылка для ссылки: https: //www.dropboxforum .com/t5/API-поддержка/Облицовка-проблема-получение-доступ-токен-из-пользователь-на-Windows/mp/205702 # M9950] – Greg

ответ

0

Как заявил Грег, раствор с помощью события Browser_Navigated. Смотрит как версия встроенного IE, моя Visual Studio (2015) использует не заметила, что если это перенаправление, она не запустит событие BrowserNavigating.