Need to see if your shared folder is taking up space on your dropbox 👨💻? Find out how to check here.
Forum Discussion
lucasj
3 years agoExplorer | Level 3
Powershell Oauth2 Refresh Token
Hey all! Thanks in advanced. I am trying to write a powershell script to get an offline refresh token so I can do unattended uploads. The problem is that I have to authenticate for an author...
- 3 years ago
I'm not sure what you mean when you say you are "not getting any type of response from the curl command". For reference, if you need to debug something with curl, you can use the "-v" flag to enable verbose mode.
In any case, I haven't tested your new code, but the parameters look right. I also don't see where you retrieve the access token from the new /oauth2/token call, but assuming you do either manually or in code not shown, it seems right. Does it work for you when you run it?
Greg-DB
Dropbox Community Moderator
3 years agoI'm not sure what you mean when you say you are "not getting any type of response from the curl command". For reference, if you need to debug something with curl, you can use the "-v" flag to enable verbose mode.
In any case, I haven't tested your new code, but the parameters look right. I also don't see where you retrieve the access token from the new /oauth2/token call, but assuming you do either manually or in code not shown, it seems right. Does it work for you when you run it?
lucasj
3 years agoExplorer | Level 3
Thanks Greg! I think I figured it out. I'm going to post code for future users with this problem.
This is the full code to get the refresh token. Replace the variables at the top where it cays CLIENTIDHERE and CLIENTSECRETHERE. Also the auth_url has a space where you have to put the CLIENTID
Once you run it, a web browser will pop up and you'll need to copy the code on the right side of the URL that pops up. This is your authorization_code that you'll have to enter in the prompt. Once you enter in the authorization code, it will give you a refresh token:
$client_id = "CLIENTIDHERE"
$client_secret = "CLIENTSECRETHERE"
# Set up the OAuth2 authorization URL
#$scope = "offline"
#$auth_url = "{0}?response_type=code&client_id={1}&scope={2}" -f $auth_url, $client_id, $scope
$auth_url = "https://www.dropbox.com/oauth2/authorize?client_id=CLIENTIDHERE&response_type=code&redirect_uri=$redirectUri&token_access_type=offline"
# Open the authorization URL in the default web browser and prompt the user to sign in and authorize your app
Start-Process $auth_url
Write-Host "Please sign in and authorize your app in the browser window that just opened."
# Prompt the user to enter the authorization code provided by Dropbox after they have authorized your app
$authorization_code = Read-Host "Enter the authorization code provided by Dropbox"
# Set up the access token request parameters
$body = @{
code = $authorization_code
grant_type = "authorization_code"
client_id = $client_id
redirect_uri = $redirectUri
client_secret = $client_secret
}
# Send the access token request and parse the response for the access token and refresh token
$response = Invoke-RestMethod -Method Post -Uri $token_url -Body $body
$access_token = $response.access_token
$refresh_token = $response.refresh_token
# Use the access token to make API calls to Dropbox
# For example, you can list the contents of the root folder like this:
$headers = @{
"Authorization" = "Bearer $access_token"
}
$list_body = @{
path = ""
recursive = $false
}
$list_response = Invoke-RestMethod -Method Post -Uri $list_url -Headers $headers -Body ($list_body | ConvertTo-Json)
$list_response.entries | Select-Object name, path_display
# Output the access token and refresh token to the console
Write-Host "Your access token is: $access_token"
Write-Host "Your refresh token is: $refresh_token"
Then this is the code that creates a function to use the refresh token to upload a file. You just need the file path as a parameter to the function.
function DropBox-Upload {
[CmdletBinding()]
param (
[Parameter (Mandatory = $True, ValueFromPipeline = $True)]
[Alias("f")]
[string]$SourceFilePath
)
$refreshToken = "REFRESHTOKENHERE"
$appKey = "CLIENTIDHERE"
$appSecret = "CLIENTSECRETHERE"
refresh_token = $refreshToken
grant_type = "refresh_token"
client_id = $appKey
client_secret = $appSecret
} -Verbose
$responseAccessToken = $response | select-object -expand "access_token"
$responseAccessToken
# Set up the URL to upload the file
# Set up the request headers with the authorization and content-type
$access_token = $responseAccessToken
$headers = @{
Authorization = "Bearer $access_token"
"Content-Type" = "application/octet-stream"
}
$outputFile = Split-Path $SourceFilePath -leaf
$TargetFilePath = "/$outputFile"
$arg = '{ "path": "' + $TargetFilePath + '", "mode": "add", "autorename": true, "mute": false }'
$authorization = "Bearer " + $access_token
$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$headers.Add("Authorization", $authorization)
$headers.Add("Dropbox-API-Arg", $arg)
$headers.Add("Content-Type", 'application/octet-stream')
$response = Invoke-RestMethod -Uri https://content.dropboxapi.com/2/files/upload -Method Post -InFile $SourceFilePath -Headers $headers
}
About Discuss Dropbox Developer & API
Make connections with other developers
The Dropbox Community team is active from Monday to Friday. We try to respond to you as soon as we can, usually within 2 hours.
If 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, Facebook or Instagram.
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!