RestSharp 中的 OAuth 2.0 身份验证

OAuth 2.0 authentication in RestSharp

我正在尝试使用 RESTsharp 库对 RESTful 服务 (sabre REST api) 进行身份验证,但我无法对其进行身份验证。我正在使用我的客户 ID 和密码。请告诉我如何使用 oAuth 2.0 身份验证器进行身份验证。

我试过这段代码。 ( saber 正在使用 OAuth 2.0 身份验证)

public ActionResult Index()
{
    var client = new RestClient("https://api.test.sabre.com");
    client.Authenticator = new HttpBasicAuthenticator("myclientid", "myclientsecret");

    RestRequest request = new RestRequest("/v1/auth/token", Method.POST);
    request.AddHeader("Authorization", "Basic " + client);
    request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
    request.AddParameter("grant_type", "client_credentials");

    IRestResponse response = client.Execute(request);
    var content = response.Content;
    ViewBag.R = content;
    return View();
}

我得到了这个结果

{"error":"invalid_client","error_description":"Credentials are missing or the syntax is not correct"}

请告诉我做错了什么。 谢谢

显示 运行 代码(不使用 RestSharp)和使用 RestSharp 的代码的 Fiddler 比较快照

使用 RestSharp

在我看来,您添加了两次授权 header。 documentation here 表示

The authenticator’s Authenticate method is the very first thing called upon calling RestClient.Execute

查看 HttpBasicAuthenticator 的实现,Authenticate 方法将适当的 header 添加到请求中。

因此请从您的示例中删除以下行:

request.AddHeader("Authorization", "Basic " + client);

您需要先从 Saber 获取访问令牌,稍后您可以在进行休息 api 调用时使用。 访问令牌 POST 请求如下所示:

POST https://api.test.sabre.com/v2/auth/token 
Authorization: Basic ZVc5MWNtTnNhV1Z1ZEdsazplVzkxY21Oc2FXVnVkSE5sWTNKbGRBPT0=
Content-Type: application/x-www-form-urlencoded 
grant_type=client_credentials

其中Authorization after Basic的值是根据你的clientId和secret经过Base64编码后的字符串 参考Sabre Authentication这个字符串是如何创建的

因此,为了获得访问令牌,您只需发送一个 POST 请求,其中包含必需的 header 和请求参数,您不需要使用身份验证器