You might see that the Dropbox Community team have been busy working on some major updates to the Community itself! So, here is some info on what’s changed, what’s staying the same and what you can expect from the Dropbox Community overall.

Forum Discussion

dotNET_Guy's avatar
dotNET_Guy
Explorer | Level 3
4 years ago

OAuth authentication for offline application using .NET SDK

Hi Guys,   I've been reading a lot of the Dropbox API documents to get OAuth2 authentication working for my offline Windows application using the .NET SDK. The 'OAuth Guide' was a great starting po...
  • Greg-DB's avatar
    4 years ago

    Use of a redirect URI is optional, and you can still request offline access to get a refresh token back without using a redirect URI. When not using a redirect URI, the user would just need to manually copy/paste the authorization code into the app.

     

    You can do that like this:

     

    First, get the authorization URL, requesting offline access, like:

    var authorizeUri = DropboxOAuth2Helper.GetAuthorizeUri(oauthResponseType:OAuthResponseType.Code,
    													   clientId: AppKey,
    													   redirectUri: (String)null,
    													   state: state,
    													   tokenAccessType: TokenAccessType.Offline,
    													   scopeList: null,
    													   includeGrantedScopes: IncludeGrantedScopes.None);

     Open that in the user's browser, such as like in the example:

    System.Diagnostics.Process.Start(authorizeUri.ToString());

    Have the user copy/paste the code into your app. This can be via your UI, but for the sake of example, this is how a console app might do this:

    var code = Console.ReadLine();

    Finish the process by exchanging the authorization code:

    var tokenResult = await DropboxOAuth2Helper.ProcessCodeFlowAsync(code: code, appKey: AppKey, appSecret: AppSecret, redirectUri: null);

    (Note that this is the non-PKCE flow, for server-side apps. For the PKCE flow, for client-side apps, a code challenge/verifier is used instead of the app secret.)

    Then you can make a client using the resulting credentials:

    var client = new DropboxClient(appKey: AppKey,
                          appSecret: AppSecret,
                          oauth2AccessToken: tokenResult.AccessToken,
                          oauth2RefreshToken: tokenResult.RefreshToken,
                          oauth2AccessTokenExpiresAt: tokenResult.ExpiresAt.Value);

    The SDK will automatically perform the refresh process for you when needed when using a client with the necessary credentials like this.