RestSharp中的OAuth 2.0身份验证

3

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

我已经尝试了这段代码。(sabre正在使用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

使用RestSharp 不使用RestSharp

2个回答

3
在我看来,似乎您添加了两次授权头。此处的文档中指出:在调用RestClient.Execute后,验证器的Authenticate方法是第一件要调用的事情。
查看HttpBasicAuthenticator实现,Authenticate方法将适当的标头添加到请求中。
因此,请从示例中删除以下行:
request.AddHeader("Authorization", "Basic " + client);

安装Fiddler并检查通过线路的授权标头。它应该是以下格式:"Basic"<空格>Base64(用户名:密码) - MvdD
我已经使用Fiddler进行了检查,发现我得到的标题与您描述的格式相同,但我认为它没有执行Base64操作,因为我已经将其与已运行的代码(而不是Restsharp客户端)进行了比较。我已经通过添加两者的比较快照来编辑了我的帖子,请看一下。谢谢。 - Junaid
我得到了答案。谢谢你告诉我使用Fiddler。它真的帮了我很多。它没有对clientId和clientSecret进行base64操作。所以我手动操作后,代码就像魔法一样运行了。 - Junaid
在Fiddler工具下有一个文本向导。您可以使用它来解码base64字符串并查看其中的区别。 - MvdD

0

在进行 REST API 调用之前,您需要先从 Sabre 获取访问令牌。访问令牌的 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 请求,而无需使用 Authenticator。


我已经成功地使用Sabre身份验证指南获取了访问令牌,但我想使用内置库Rest Sharp客户端来实现相同的功能。 - Junaid

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接