We are aware of the issue with the badge emails resending to everyone, we apologise for the inconvenience - learn more here.
Forum Discussion
Ivan_
3 years agoHelpful | Level 6
How to programmatically get the Authorization code without requiring the user approval in OAuth 2.0
Hi,
I need to get approve code programmatically without this form via c# code
this is my code
How it should be modified in order to get approve code automatically without us...
- 3 years ago
Ivan_ wrote:...
The problem is that this code does not work in my Application. It stops at Proce/ssCodeFlowAsync method and after that the eternal loading of response begins. Sometimes eternal loading begins at HandleJSRedirect and HandleOAuth2Redirect methods, I do not know what causes such behavior.
...
Ivan_, the code is for one time use!!! Once you get your credentials (access token and refresh token) the code isn't valid anymore! You should keep received credentials (primary the refresh token) and reuse later when needed to construct client object. Why after the authentication (you have credentials already) are you calling still handlers designate for initial authentication? 🤔 I cannot see a reason.
Здравко
3 years agoLegendary | Level 20
Ivan_ wrote:...
I need to get approve code programmatically ...
You can use redirect URL and listen to there. What actually are you using the 'http' object for? 😉
Ivan_ wrote:...
How it should be modified in order to get approve code automatically without user actions ?
...
It's not possible for user side authentication (or least not a good idea). It's only possible on server side with pre-authentication and embedded credentials into the server, if applicable in your case.
- Ivan_3 years agoHelpful | Level 6
Hi Здравко
I tried to do this
But I faced with such problem :
Firstly I am sending the request in order to get Approve code
After I performed confirmation in browser that I am trusting source I get this thing in browser
If look closely to URL it contains code that I need to extract automatically
It looks exactly as code in browser during usual approve
However when I copied it to request for generating token
I receive error
I do not know what I am doing wrong
If I execute this code
It will give me approve code after confirmation in browser
via which the token is generated successfully
But when I try to do all same with only one difference, that after user's confirmation this approve code will be extracted by program, not by user manually via this code
I get error that I described above
To sum up : the only thing that I need to implement is to make automatic approve_code extraction, without making user to copy this code from browser manually after user approved that he trusts source
- Ivan_3 years agoHelpful | Level 6
Hi Здравко
I tried to do this
But I faced with such problem :
Firstly I am sending the request in order to get Approve code
After I performed confirmation in browser that I am trusting source I get this thing in browser
If look closely to URL it contains code that I need to extract automatically
It looks exactly as code in browser during usual approve
However when I copied it to request for generating token
I receive error
I do not know what I am doing wrong
If I execute this code
It will give me approve code after confirmation in browser
via which the token is generated successfully
But when I try to do all same with only one difference, that after user's confirmation this approve code will be extracted by program via this code
I get error that I described above
To sum up : the only thing that I need to implement is to make automatic approve code extraction, without making user to copy this code from browser manually
- Здравко3 years agoLegendary | Level 20
Ivan_ wrote:...
After I performed confirmation in browser that I am trusting source I get this thing in browser
If look closely to URL it contains code that I need to extract automatically ...
Yes, that's a desired behavior. The code (together with state) is passed as a HTTP query parameter (as denoted in documentation too).
In addition to what Greg said, can be noted that pointed examples use second redirection step (don't ask me why; seems confusing, but...🤷). It can be implemented much simpler, but somebody have decided so (you are not mandated to follow the examples 1 to 1 - just get the idea out of there). For some reason the second redirection step seems doesn't comes up and so you can see the URL you are seeing. There can be different reasons, but at the beginning take a look if you give back to the browser the JS code responsible for the second redirection step and why this step fails (if you think still to follow the examples 1 to 1 - with step for second redirection).
- Ivan_3 years agoHelpful | Level 6
Hi Здравко
Thank you for provided information
I faced with following problem
In console application everything works fine and token successfully generated
Here I attach body of the await methods
Some important notes :
RedirectUri variable is local host
redirectUri is bariable with value that DropBox returns to me with approve code
The rest part of the code is same to the example that is provided in documentation
The problem is that this code does not work in my Application. It stops at Proce/ssCodeFlowAsync method and after that the eternal loading of response begins. Sometimes eternal loading begins at HandleJSRedirect and HandleOAuth2Redirect methods, I do not know what causes such behavior.
I want to mention that in Console Application everything works great, without any troubles, but when I execute same code in my project app - eternal loading always starts, it looks like some troubles with threads, but I do not know what is wrong.
Here is my code in text
var http = new HttpListener();
http.Prefixes.Add(LoopbackHost);
http.Start();var state = Guid.NewGuid().ToString("N");
var authorizeUri = DropboxOAuth2Helper.GetAuthorizeUri(OAuthResponseType.Code, ApiKey,
RedirectUri, state: state, tokenAccessType: TokenAccessType.Offline, scopeList: scopeList, includeGrantedScopes: includeGrantedScopes);
System.Diagnostics.Process.Start(authorizeUri.ToString());// Handle OAuth redirect and send URL fragment to local server using JS.
await HandleOAuth2Redirect(http);// Handle redirect from JS and process OAuth response.
var redirectUri = await HandleJSRedirect(http);var tokenResult = await DropboxOAuth2Helper.ProcessCodeFlowAsync(redirectUri, ApiKey, ApiSecret, RedirectUri.ToString(), state);
Console.WriteLine("Finished Exchanging Code for Token");
string Access = tokenResult.AccessToken;-------------------------------------------------------------------------------
private async Task<Uri> HandleJSRedirect(HttpListener http)
{
var context = await http.GetContextAsync();
// We only care about request to TokenRedirectUri endpoint.
//while (context.Request.Url.AbsolutePath != JSRedirectUri.AbsolutePath)
//{
// context = await http.GetContextAsync();
//}
Uri redirectUri = new Uri(context.Request.UrlReferrer.ToString());
return redirectUri;
}
private async Task HandleOAuth2Redirect(HttpListener http)
{
var context = await http.GetContextAsync();
// We only care about request to RedirectUri endpoint.
while (context.Request.Url.AbsolutePath != RedirectUri.AbsolutePath)
{
context = await http.GetContextAsync();
}
//context.Response.ContentType = "text/html";
//Respond with a page which runs JS and sends URL fragment as query string
//to TokenRedirectUri.
//using (var file = File.OpenRead("index.html"))
//{
// file.CopyTo(context.Response.OutputStream);
//}
context.Response.OutputStream.Close();
}
- Greg-DB3 years agoDropbox Staff
Ivan_ The 127.0.0.1:52475 address seen in your screenshot is the address of a local server that should be used to programmatically receive the authorization code. Please refer to the examples as written to see how that is extracted:
- Ivan_3 years agoHelpful | Level 6
Hi Greg-DB
Thank you for provided links
I faced with following problem
In console application everything works fine and token successfully generated
Here I attach body of the await methods
Some important notes :
RedirectUri variable is local host
redirectUri is bariable with value that DropBox returns to me with approve code
The rest part of the code is same to the example that is provided in documentation
The problem is that this code does not work in my Application. It stops at Proce/ssCodeFlowAsync method and after that the eternal loading of response begins. Sometimes eternal loading begins at HandleJSRedirect and HandleOAuth2Redirect methods, I do not know what causes such behavior.
I want to mention that in Console Application everything works great, without any troubles, but when I execute same code in my project app - eternal loading always starts, it looks like some troubles with threads, but I do not know what is wrong.
Here is my code in text
var http = new HttpListener();
http.Prefixes.Add(LoopbackHost);
http.Start();var state = Guid.NewGuid().ToString("N");
var authorizeUri = DropboxOAuth2Helper.GetAuthorizeUri(OAuthResponseType.Code, ApiKey,
RedirectUri, state: state, tokenAccessType: TokenAccessType.Offline, scopeList: scopeList, includeGrantedScopes: includeGrantedScopes);
System.Diagnostics.Process.Start(authorizeUri.ToString());// Handle OAuth redirect and send URL fragment to local server using JS.
await HandleOAuth2Redirect(http);// Handle redirect from JS and process OAuth response.
var redirectUri = await HandleJSRedirect(http);var tokenResult = await DropboxOAuth2Helper.ProcessCodeFlowAsync(redirectUri, ApiKey, ApiSecret, RedirectUri.ToString(), state);
Console.WriteLine("Finished Exchanging Code for Token");
string Access = tokenResult.AccessToken;-------------------------------------------------------------------------------
private async Task<Uri> HandleJSRedirect(HttpListener http)
{
var context = await http.GetContextAsync();
// We only care about request to TokenRedirectUri endpoint.
//while (context.Request.Url.AbsolutePath != JSRedirectUri.AbsolutePath)
//{
// context = await http.GetContextAsync();
//}
Uri redirectUri = new Uri(context.Request.UrlReferrer.ToString());
return redirectUri;
}
private async Task HandleOAuth2Redirect(HttpListener http)
{
var context = await http.GetContextAsync();
// We only care about request to RedirectUri endpoint.
while (context.Request.Url.AbsolutePath != RedirectUri.AbsolutePath)
{
context = await http.GetContextAsync();
}
//context.Response.ContentType = "text/html";
//Respond with a page which runs JS and sends URL fragment as query string
//to TokenRedirectUri.
//using (var file = File.OpenRead("index.html"))
//{
// file.CopyTo(context.Response.OutputStream);
//}
context.Response.OutputStream.Close();
}
About Dropbox API Support & Feedback
Find help with the Dropbox API from other developers.
5,877 PostsLatest Activity: 12 months agoIf you need more help you can view your support options (expected response time for an email or ticket is 24 hours), or contact us on X or Facebook.
For more info on available support options for your Dropbox plan, see this article.
If you found the answer to your question in this Community thread, please 'like' the post to say thanks and to let us know it was useful!