【发布时间】:2014-11-18 00:32:59
【问题描述】:
我真的希望这不是一个愚蠢的问题。我在同一条船上这个人是/我相信:uploading files to Dropbox, bypassing authorization page?
不过,我会更详细地解释。
我已经构建了一个支持服务器端存储和 AWS S3 的自定义 asp.net 文件上传控件,我想添加 Dropbox。
来自 api 文档:https://www.dropbox.com/developers/core/docs
看来我必须先生成一个令牌,验证应用程序,然后连同令牌一起调用https://www.dropbox.com/1/oauth/authorize。
问题是我希望最终用户能够安装控件,将他们的应用程序/密钥添加到控件设置中,并在页面加载时准备就绪。
所以我不想让每个 John Doe 都使用 api 来授予权限并将文件上传到他们自己的 Dropbox。
希望我说得通...这里有一些代码:
Dim appKey As String = "myappkey"
Dim appSecret As String = "mysecretkey"
Dim uri As Uri = New Uri("https://api.dropbox.com/1/oauth/request_token")
Dim oAuth As OAuthBase = New OAuthBase()
Dim nonce As String = oAuth.GenerateNonce()
Dim timeStamp As String = oAuth.GenerateTimeStamp()
Dim parameters As String = String.Empty
Dim normalizedUrl As String = String.Empty
Dim signature As String = oAuth.GenerateSignature(uri, appKey, appSecret, String.Empty, String.Empty, "GET", timeStamp, nonce, OAuthBase.SignatureTypes.HMACSHA1, _
normalizedUrl, parameters)
signature = HttpUtility.UrlEncode(signature)
Dim requestUri As StringBuilder = New StringBuilder(uri.ToString)
With requestUri
.AppendFormat("?oauth_consumer_key={0}&", appKey)
.AppendFormat("oauth_nonce={0}&", nonce)
.AppendFormat("oauth_timestamp={0}&", timeStamp)
.AppendFormat("oauth_signature_method={0}&", "HMAC-SHA1")
.AppendFormat("oauth_version={0}&", "1.0")
.AppendFormat("oauth_signature={0}", signature)
End With
Dim request As HttpWebRequest = WebRequest.Create(New Uri(requestUri.ToString()))
request.Method = WebRequestMethods.Http.Get
Dim response As HttpWebResponse = request.GetResponse()
Dim queryString = New StreamReader(response.GetResponseStream()).ReadToEnd()
Dim parts = queryString.Split("&"c)
Dim token = parts(1).Substring(parts(1).IndexOf("="c) + 1)
Dim tokenSecret = parts(0).Substring(parts(0).IndexOf("="c) + 1)
Dim queryString2 As String = String.Format("oauth_token={0}", token)
' the below code is what I want to bypass, as in verifying the app permissions by loading a Dropbox verification page.
Dim authorizeUrl As String = "https://www.dropbox.com/1/oauth/authorize?" + queryString2
也许我在这里错过了一些基本的东西,或者可能是一个在线示例。
再说一次,我网站的访问者将能够使用这个文件上传器,比如假设他们正在为他们的个人资料页面上传个人资料图片...这是我的网站保管箱帐户。希望这是有道理的。
感谢任何指导。
谢谢。
【问题讨论】:
-
所以您希望用户对您的 DropBox 帐户进行身份验证,以便他们可以将他们的个人资料图片上传到您的帐户?
-
@TyCobb 正确。想象一个社交网站,我想使用 Dropbox,而不是使用文件系统进行文件存储。 (即:/Dropbox/Users/Uploads/Picture.jpg)
-
@user1447679,您说“正确”,但您所说的其余部分似乎不匹配。 :-) 你真的是说每个安装你的控件的用户都应该将文件上传到你的帐户吗?这似乎不是一个好主意。如果他们应该上传到他们的帐户,那么他们需要授权该应用。 (否则它将无权写入其 Dropbox。)
-
@smarx 不,我为缺乏明确性表示歉意。我希望其他网站开发人员能够在他们的网站上安装上传器。他们输入了自己的应用程序密钥/秘密。他们可以随意使用他们网站上的上传器。 “Dropbox”混淆了问题本身。我使用了一个社交网站的例子。当有人在 Facebook 上上传个人资料图片时,它会存储在 Facebook 的服务器上。我想使用 Dropbox 作为此控件的一个选项,因此网站所有者/开发人员将设置自己的 Dropbox 帐户。
-
就像有人可以使用 Amazon S3 为他们的网站或 Azure 存储文件一样...我想集成 Dropbox。
标签: asp.net vb.net dropbox dropbox-api