【问题标题】:Can the app permission/verification be bypassed for Dropbox API?可以绕过 Dropbox API 的应用权限/验证吗?
【发布时间】: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


【解决方案1】:

基于 cmets,目标是让每个部署代码的开发人员都使用他们的 Dropbox 帐户作为上传目的地。

每个开发者都需要使用他们的帐户进行身份验证,并将他们的访问令牌放入(代码或配置)中。请参阅https://www.dropbox.com/developers/blog/94/generate-an-access-token-for-your-own-account,了解开发人员使用自己的应用程序执行此操作的一键式方式。但请注意,这是 Dropbox 的一种奇怪用法,因为 Dropbox 通常是为了让每个最终用户都可以使用自己的帐户进行授权并使用自己的 Dropbox。

【讨论】:

  • 哦...我的...天哪。谷歌搜索和谷歌搜索并查看示例,我扫描了这个!谢谢你。
  • 有趣的是,我也只是偶然发现了你的 repo OAuth2 - 很难。以为我会再扔一个谢谢:)
猜你喜欢
  • 2019-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多