【问题标题】:Sending values to OAuth - Header or querystring?将值发送到 OAuth - 标头或查询字符串?
【发布时间】:2013-05-10 23:13:03
【问题描述】:

当请求授权(或任何其他类型的请求)时,参数oauth_tokenoauth_signature是否应该通过查询字符串发送或通过将它们作为值添加到您的HttpWebRequest.Header 作为NameValueCollection 添加到标题?

【问题讨论】:

  • 这取决于服务器实现,oauth 规范支持两者。你在使用什么 api?

标签: asp.net oauth


【解决方案1】:

根据他们的示例 ruby​​ 代码,他们正在标题中寻找它。

consumer = OAuth::Consumer.new(
        "API_CONSUMER_KEY",
        "API_CONSUMER_SECRET",
        :site => "https://yoursite.Desk.com",
        :scheme => :header
)

oauth_token 和 oauth_signature(以及以 oauth_ 开头的所有其他参数)都将作为逗号分隔的名称值对进入授权 http 标头中,如下所示 https://www.rfc-editor.org/rfc/rfc5849#section-3.5.1

这是一个使用DevDefined.OAuth library的简单示例...

var endPoint = new Uri("https://yoursite.Desk.com");
var ctx = new OAuthConsumerContext
{
    ConsumerKey = "consumerkey1",
    ConsumerSecret = "consumersecret1",
    SignatureMethod = SignatureMethod.HmacSha1
};

var session = new OAuthSession(ctx, endPoint);
session.AccessToken = new TokenBase
{
    Token = "ACCESS_TOKEN",
    TokenSecret = "ACCESS_TOKEN_SCRET"
};

var respText = session.Request().Get().ForUri(endPoint).ToString(); 

【讨论】:

  • 我刚刚与他们的一位支持人员交谈过。他说它可以在标题或查询字符串中......我猜他所说的。
  • 仅供参考,您应该改为引用此tools.ietf.org/html/rfc5849#ref-W3C.REC-html40-19980424..您正在查看的 OAuth 链接已过时。
  • 我没有得到的另一件事是签名。为了请求临时凭证以请求访问令牌,此签名通过 HmacSha1 传递,但没有关于此签名包含什么或如何形成(哪些字段等)的信息。我指的是 OAuth 文档,例如 oauth_signature="74KNZJeDHnMBp0EMJ9ZHt%2FXKycU%3D"
  • 这就是我将您链接到第 3 方 .net 库的原因,因为获取签名和其他所有内容都可能很棘手。 rfc5849 的第 3.4 节讨论了创建签名。您基本上需要收集所有 oauth 参数,并对查询字符串参数进行排序和编码以创建基本字符串。然后,您使用 SHARED_SECRET&TOKEN_SECRET 作为密钥对其进行 hmac 签名。如果你想自己实现,这是一个很好的起点oauth.googlecode.com/svn/code/csharp/OAuthBase.cs
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-29
  • 1970-01-01
  • 1970-01-01
  • 2019-07-22
  • 2020-04-16
  • 1970-01-01
相关资源
最近更新 更多