【问题标题】:Rest API Responds with 403 Forbidden from application, works fine if called from PostmanRest API 从应用程序响应 403 Forbidden,如果从 Postman 调用,则工作正常
【发布时间】: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# 请求进行比较?邮差长什么样?
  • 这可能会有所帮助github.com/dotnet/corefx/issues/30349
  • @davidG 我如何检查这个?我使用提琴手拦截,但整个请求被编码,因此我无法将其与我的 .net 请求进行比较
  • @brainless coder - 给定的链接似乎在谈论 oAuth 2.0 而我使用的是 oAuth 1.0
  • 被编码了是什么意思?

标签: c# rest web-services oauth postman


【解决方案1】:

在 Postman 中,在“发送”按钮下,单击“代码”按钮 - 这具有适用于每种语言的代码生成器 - 选择 C# 并尝试,如果没有生成 curl 并验证您是否拥有所有内容。

【讨论】:

  • 这并不能回答问题,它只是一种生成代码的方式。这是一个很好的评论。
  • 两件事。 1. 这正是我解决问题的方法。 2. 那么提供一个更好的答案。 “不过,这是一个很好的评论”......感谢上帝。
  • 我不想回答,因为我们没有足够的信息来提供。你应该把它写成评论,而不是答案。
  • 这可能会让这里的每个人都感到震惊,但 DavidG 并没有规定用户如何使用 StackOverflow 来解决问题
  • 这可能也让你震惊,但我是想帮你,没必要用蛇皮。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多