【问题标题】:Formatting Request Header Values格式化请求标头值
【发布时间】:2013-12-18 16:52:59
【问题描述】:

试图弄清楚我是否需​​要在我的标题值中转义字符。如果我将 OAuth 的标头授权发送到服务器资源,就像下面的示例一样:

“PUT /api/v1/articles/6.json HTTP/1.1\r\nAccept: /\r\nUser-Agent: OAuth gem v0.4.5\r\nContent-Length: 9\r\nContent-Type: application/x-www-form-urlencoded\r\nAuthorization: OAuth oauth_consumer_key=\”nMu4u9pLRfDrxhPVK5yn\“, oauth_nonce=\”5346IG1e5bV3ytQwdFqkP8Rgr0VJiA9Xb4FE0\“, oauth_signature=\”64545G%2Byp%2F2BsqJ%2BUUgbjIIIV9E%3D\“, oauth_signature_method=\”HMAC-SHA1\“, oauth_timestamp=\”1330022891\“, oauth_token=\”ivouGxpsJbyIU5viPKOO\“, oauth_version=\”1.0\“\r\nConnection: close\r\nHost: someHostNameHere\r\n\r\n”

现在我将它(我的授权集合的值部分)作为一个大字符串发送给我的授权密钥值:

"OAuth oauth_consumer_key=Mu4u9pLRfDrxhPVK5y, oauth_nonce=5346IG1e5bV3ytQwdFqkP8Rgr0VJiA9Xb4FE0, oauth_signature=64545G%2Byp%2F2BsqJ%2BUUgbjIIIV9E%3D, oauth_signature_method=HMAC-SHA1, oauth_timestamp=1330022891, oauth_token=ivouGxpsJbyIU5viPKOO, oauth_version=1.0"

【问题讨论】:

  • oAuth 有很多open source .Net libraries。你为什么不使用其中之一?
  • 这是我自己的代码。您看到的第一个字符串是我从将要使用的 API 获得的示例请求......来自他们的支持人员。所以我不确定这种转义是普遍的还是什么。为什么我不使用开源 OAuth 框架? a)因为我已经自己滚动了,b)因为我不喜欢臃肿或意外的变化,或者必须被推向某个方向,c)你拿到这些东西后,自己滚动并不难。越简单越好,我的是可扩展的,但我不需要一个完整的臃肿框架来为我提供我们在这里需要的基本 OAuth 功能
  • 所以回到我的问题。在请求标头中这样的转义字符是否普遍,因为我错过了它们并且应该将它们放在我的中?
  • 除非你不使用 TcpClient/Socket,否则你永远不必发送这样的字符串。
  • 请详细说明您的技术堆栈是什么,到目前为止似乎是原始套接字。这是c#吗?他们的示例使用表单编码参数。通常,您使用 OAuth 参数添加授权标头,就像您拥有它们一样。

标签: c# .net oauth


【解决方案1】:

我会这样做:

var url = "https://somedomain.com/resource/v1/";
var request = WebRequest.Create(url) as HttpWebRequest;
request.Method = "POST";
request.ContentType = "text/xml";
var oAuthHeader = "OAuth oauth_consumer_key=Mu4u9pLRfDrxhPVK5y, oauth_nonce=5346IG1e5bV3ytQwdFqkP8Rgr0VJiA9Xb4FE0, oauth_signature=64545G%2Byp%2F2BsqJ%2BUUgbjIIIV9E%3D, oauth_signature_method=HMAC-SHA1, oauth_timestamp=1330022891, oauth_token=ivouGxpsJbyIU5viPKOO, oauth_version=1.0";
request.Headers.Add("Authorization", oAuthHeader);
var response = request.GetResponse();

不确定为什么要构建自己的原始 HttpRequest。显然你会调用一些函数来生成你的 OAuth 标头值,这只是说明性的。

【讨论】:

  • 我就是这样做的。谢谢。因此,您将其按字面意思添加为一个大的长逗号稀释字符串...只是想验证我在尝试将 oauth 参数添加到标头的身份验证时是否正确地执行了授权的值。
  • 只有其他的东西...... url 不应该包含您要获取的资源吗?我猜你有它在中间但是当我有 /api/ 那是不会改变的文字文本。我正在为其创建包装器的这个第三方 API 的资源将是例如在 v1/ 之后的customers.json
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多