gpt4 book ai didi

c# - 如何诊断尝试在 C# .NET Core 中获取 OAuth2 持有者 token 的 401 错误?

转载 作者:行者123 更新时间:2023-12-03 02:49:36 26 4
gpt4 key购买 nike

我在 c++ 方面的技能有限,最近转向了 C# (asp.net)azure Web 服务。作为 PoC,我正在尝试对 PayPal 进行 REST 调用(我需要在 3 -6 个月内专业使用它)。

我已按照说明设置了我的个人 PayPal 帐户 here我按照链接中的描述使用curl 获取不记名 token 。惊人的。

我现在尝试从 .NET Core C# 执行此操作,但得到的只是 401 错误。我检查了该请求,它在 header 方面似乎与 curl 相同;我认为我添加的 base64 编码凭据与详细的 curl 日志中的相同(我通过眼睛检查了两个 base64 字符串),所以它一定是某种东西我正在(或不做)通话的设置中。我正在寻找建议、指点,或者是对我所犯的明显错误的笑声。

我已经设置了我认为的指定客户端:

 public IConfiguration Configuration { get; }

// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddHttpClient("PayPal", c =>
{
c.BaseAddress = new Uri("https://api.sandbox.paypal.com/v1/");
c.DefaultRequestHeaders.Add("Accept", "application/json");
c.DefaultRequestHeaders.Add("Accept-Language", "en_US");
});

(为简洁起见,省略了 VS 附带的所有其他免费内容)。

我尝试这样调用:

           string clientCredString = CLIENTID + ":" + SECRET;
var clientCreds = System.Text.Encoding.UTF8.GetBytes(clientCredString);
var client = _clientFactory.CreateClient("PayPal");
client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", System.Convert.ToBase64String(clientCreds));
var messageBody = new Dictionary<string,string > ();
messageBody.Add("grant_type", "client_credientials");
var request = new HttpRequestMessage(HttpMethod.Get, "oauth2/token")
{
Content = new FormUrlEncodedContent(messageBody)
};
string token;
var response = await client.SendAsync(request);
if (response.IsSuccessStatusCode)
{
var json = await response.Content.ReadAsStringAsync();
token = JsonConvert.DeserializeObject<string>(json);

}
else
{
throw new ApplicationException("Well that failed");
}

并获取 401 代码来解决我的麻烦。

故障排除的建议、更好的方法以及对我的愚蠢的 mock 都受到欢迎。

最佳答案

更新:

我阅读了文档,有几个项目对我来说很突出:

  • 需要一个 post 动词。
  • 使用 FormUrlEncodedContent 作为客户端凭据。
  • 基本身份验证需要用户名和密码(客户端 ID 和密码)

我认为语法应该是:

var client = new HttpClient();
using var request = new HttpRequestMessage(HttpMethod.Post, "...");
request.Content = new Dictionary<string, string>() { "grant_type", "client_credentials" };
request.Headers.Authorization = new AuthenticationHeaderValue("Basic", $"{Encoding.UTF8.GetBytes($"{id}:{secret}")}");
HttpResponseMEssage = response = await client.PostAsync(request);

response.EnsureSuccessStatusCode();
var content = await response.Content.ReadAsStringAsync();

关于c# - 如何诊断尝试在 C# .NET Core 中获取 OAuth2 持有者 token 的 401 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60065550/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com