【问题标题】:OAuth 2.0 authentication in RestSharpRestSharp 中的 OAuth 2.0 身份验证
【发布时间】:2023-03-07 14:55:02
【问题描述】:

我正在尝试使用 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"}

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

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

使用 RestSharp

【问题讨论】:

    标签: authentication oauth restsharp


    【解决方案1】:

    在我看来,您添加了两次 Authorization 标头。 documentation here

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

    看HttpBasicAuthenticator的实现,Authenticate方法在请求中添加了合适的header。

    所以从您的示例中删除以下行:

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

    【讨论】:

    • 安装 Fiddler 并检查越过该行的 Authorization 标头。格式应为:"Basic"Base64(username:password)
    • 我已经与 Fiddler 进行了核对,问题是我得到的标题格式与您描述的相同,但我认为它没有执行 Base64 操作,因为我已经将它与已经运行的代码进行了比较(而不是Restsharp 客户端)。我通过添加两者的比较快照来编辑我的帖子。请看一下。谢谢
    • 我得到了答案。 Thnx 告诉我使用提琴手。它真的帮助了我。它没有对 clientId 和 clientSecret 进行 base64 操作。所以我手动完成了,代码就像一个魅力。
    • 在 Fiddler 的工具下有一个文本向导。你可以用它来解码base64字符串,看看有什么不同。
    【解决方案2】:

    您需要先从 Sabre 获取访问令牌,以便稍后在进行 REST 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 请求,而无需使用 Authenticator

    【讨论】:

    • 我已经使用 Sabre 身份验证指南成功获得了访问令牌,但我想使用内置库的 Rest Sharp 客户端实现相同的功能。
    猜你喜欢
    • 2015-01-13
    • 2012-11-08
    • 2014-12-27
    • 2012-05-29
    • 1970-01-01
    • 1970-01-01
    • 2018-06-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多