我正在尝试使用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
答案 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请求,而您不需要使用身份验证器