【发布时间】:2019-09-07 03:12:33
【问题描述】:
我正在尝试发布到使用 OAuth 1.0 进行身份验证的 Rest API。 API 提供商为我提供了 Token 和 Secrets 以及 Consumer 密钥,使用它们我可以成功创建与 PostMan 一起使用的 OAuth 标头
但问题是,当我尝试使用 HttpClient 使用相同的标题和正文时,它会向我抛出 403 Forbidden。
我已确保标题或正文或 URL 中没有差异
似乎 PostMan 无法在 C# 中重新创建一些 Extra/Less 的东西
private static async Task<string> SendRequest(string fullUrl, string oAuthHeader)
{
var json = GetJsonPayload();
var sc = new StringContent(json, Encoding.UTF8, "application/json");
sc.Headers.Add("ContentType", "application/json");
using (var http = new HttpClient())
{
http.DefaultRequestHeaders.Add("Authorization", oAuthHeader);
var httpResp = await http.PostAsync(fullUrl, sc);
httpResp.EnsureSuccessStatusCode();
var respBody = await httpResp.Content.ReadAsStringAsync();
return respBody;
}
}
我的 OAuth 字符串如下所示 --
OAuth realm="REALM", oauth_consumer_key="CONSUMERKEY", oauth_nonce="NFcdqA", oauth_signature_method="HMAC-SHA1", oauth_signature="GENERATEDSIGNATURE", oauth_timestamp="1555457636", oauth_token="TOKEN", oauth_version="1.0"
我观察到在 Postman 中,如果在 Authorization 选项卡中我选择 Type as No Auth 并使用给定的 OAuth 字符串将手动标题设置为 Authorization Postman 也会抛出 403,但选择 Authorization Type 为 OAuth 1.0 有效,我不能似乎找到了为什么会这样以及如何在 C# 中设置类型
任何帮助/指针将不胜感激。
【问题讨论】:
-
您是否尝试过将 Postman 请求与 C# 请求进行比较?邮差长什么样?
-
@davidG 我如何检查这个?我使用提琴手拦截,但整个请求被编码,因此我无法将其与我的 .net 请求进行比较
-
@brainless coder - 给定的链接似乎在谈论 oAuth 2.0 而我使用的是 oAuth 1.0
-
被编码了是什么意思?
标签: c# rest web-services oauth postman