【问题标题】:imgur upload to authenticated api in c#imgur上传到c#中经过身份验证的api
【发布时间】:2011-07-14 08:03:37
【问题描述】:

我找到了大量用于将图像上传到 imgur 的 C# 示例……但是它们似乎都在使用匿名 API。 SO 关于是否可以调整其中任何一个以使用经过身份验证的 API 的任何想法,和/或应该使用什么 oAuth API 来执行此操作而无需启动浏览器。

我正在查看的示例(如果您搜索“C# IMGUR”,还有其他示例)在这里:http://api.imgur.com/examples#uploading_cs

然后讨论 authenticated API 的 API 部分是这样说的:

要使用经过身份验证的 API, 你要做的第一件事就是注册 申请并获得您的 消费者密钥和秘密。这把钥匙和 秘密方案用于 OAuth 1.0a认证协议。

但是,当从 WP7 等移动设备与 API 进行通信时,这并不明显。特别是,OAuth examples wiki for .net 中显示的示例使用浏览器,我希望此应用程序在后台无缝使用 imgur ... 即。我为要上传的应用注册了一个帐户,因此用户不必是提供身份验证的人。

谢谢!

【问题讨论】:

  • 嗯肯定有修改..如果您检查了 imagur API..您将了解哪种方法最适合您的需求..也就是说..您还没有在这里提出具体的可回答问题。向我们展示您正在尝试的代码,我们会看到。
  • 好的,很公平......我添加了更多细节:-)

标签: c# oauth imgur


【解决方案1】:

如果不是必需的,你需要使用imgur,那么我建议你尝试yfrog

示例

抱歉,我没有时间编写 C# 示例,但这里是 PHP 示例:(source link)

<?php

    /**
     * This example demonstrates how to use OAuth credentials of your application to upload data to yfrog
     * Usage: upload-to-yfrog-example.php <FILENAME-TO-UPLOAD>
     */

    // TODO: PUT YOUR KEYS HERE

    // your app's OAuth consumer & secret
    define('OAUTH_CONSUMER_KEY', '');
    define('OAUTH_CONSUMER_SECRET', '');

    // your app user's token and secret, when twitter user granted access to your app
    define('OAUTH_TOKEN_KEY', '');
    define('OAUTH_TOKEN_SECRET', '');

    // END OF TODO

    // you can grab required file here:
    // http://github.com/abraham/twitteroauth
    require_once('OAuth.php');

    // instantiating OAuth customer 
    $consumer = new OAuthConsumer(OAUTH_CONSUMER_KEY, OAUTH_CONSUMER_SECRET);
    // instantiating signer
    $sha1_method = new OAuthSignatureMethod_HMAC_SHA1();
    // user's token
    $token = new OAuthConsumer(OAUTH_TOKEN_KEY, OAUTH_TOKEN_SECRET);

    // signing URL
    $url = 'https://twitter.com/account/verify_credentials.xml';
    $request = OAuthRequest::from_consumer_and_token($consumer, $token, 'GET', $url, array());
    $request->sign_request($sha1_method, $consumer, $token);

    $url = $request->to_url();
    // OK, URL is signed, we can pass it to yfrog API

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, 'http://yfrog.com/api/upload');

    $post = array
    (
        'username' => 'yfrogtests', // twitter's username
        'verify_url' => $url,  // signed URL
        'media' => '@' . $argv[1], // filename
        'auth' => 'oauth',  // auth=oauth is mandatory to use verify_url method
        'message' => 'see it live on yfrog' // message to be sent, will not be posted to twitter
    );
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_VERBOSE, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post);

    $response = curl_exec($ch);
    curl_close ($ch);

    echo $response;

    // see http://twitter.com/yfrogtests

?>

编辑:

正常流程表明 应用程序将请求令牌发送到 Twitter 中的 oauth/authorize OAuth 的实现 规范。

访问令牌能持续多久?

我们目前没有使访问过期 令牌。您的访问令牌将是 如果用户明确拒绝则无效 您的应用程序从他们的设置 或者如果 Twitter 管理员暂停了你的 应用。如果您的应用程序是 暂停会有一个说明你 应用程序页面说它有 被暂停了。

来源:http://dev.twitter.com/doc

您需要拥有访问令牌,并且要获得它,用户需要首先批准您的应用程序 - 没有办法。

此外,您的应用程序可以对 1 个帐户进行的(写入)访问次数限制为每天约 300 次。因此,除非您的程序是为 1-3 人设计的,否则您将达到该限制。我的结论是:用户需要提供身份验证。

【讨论】:

  • “当 twitter 用户授予访问您的应用程序的权限时”......这是我有疑问的部分。我希望应用程序能够访问该服务以将内容提交到专门为该应用程序开设的帐户中。有没有一种方法可以在不需要用户干预的情况下获得 oauth 令牌
【解决方案2】:

当您使用 Oauth 时,最终用户需要拥有某种 imgur 帐户。我刚刚注册,我需要登录并选择一个子域等。看起来你的应用程序的最终用户需要做同样的事情才能进入 Oauth 部分。到目前为止,这与我对需要 Oauth 的 API 的其他使用没有太大区别。

用户拥有帐户后,他们需要通过 Oauth 有效地获取一组委托的凭据。这需要您获取授权 URL,在浏览器中打开该 URL 以让用户确认他们授权您的应用程序,然后他们将获得一个验证者令牌以输入客户端应用程序。完成这些步骤后,客户端应用应该拥有调用 API 所需的所有 Oauth 凭据。

我认为,只有当您拥有用户的 cookie 并且能够执行检索和输入验证程序代码所需的 HTTP 请求时,您才能避免浏览器步骤。

【讨论】:

  • 正如我在问题中提到的,我(开发人员)已经开设了一个帐户,我希望应用程序使用这个并且只使用这个帐户。最终用户不会提供帐户凭据
猜你喜欢
  • 2016-05-25
  • 1970-01-01
  • 1970-01-01
  • 2019-09-25
  • 2017-01-21
  • 2013-01-27
  • 2016-01-17
  • 2018-05-17
  • 2020-08-02
相关资源
最近更新 更多