RestSharp

时间:2015-07-11 00:18:36

标签: authentication oauth restsharp

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

我试过这段代码。 (军刀正在使用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"}
请告诉我我做错了什么。 感谢

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

使用RestSharp

using RestSharp Not using RestSharp

2 个答案:

答案 0 :(得分:2)

对我而言,就像你要两次添加Authorization标头一样。 documentation here

  

验证者的Authenticate方法是第一个被调用的方法   在调用RestClient.Execute

查看HttpBasicAuthenticator的实现,Authenticate方法将相应的标头添加到请求中。

请从示例中删除以下行:

  

request.AddHeader(“授权”,“基本”+客户端);

答案 1 :(得分:0)

您需要首先从Sabre获取访问令牌,以后可以在进行休息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

其中Basic之后的Authorization的值是基于您的clientId和secret的Base64编码字符串 有关如何创建此字符串的信息,请参阅Sabre Authentication

因此,为了获取访问令牌,您只需要发送带有必需头和请求参数的POST请求,而您不需要使用身份验证器