控制台应用程序中的OAuth2访问令牌

时间:2020-03-12 21:39:57

标签: c# oauth-2.0 restsharp

我正在尝试构建一个C#dotnetcore控制台应用程序,以与使用OAuth2进行授权的api进行交互。我还没有弄清楚如何将其用于C#控制台应用程序甚至是不打算让用户登录的库。这甚至可能吗?

到目前为止,我得到的是以下内容:

    private static string _auth_url = "https://idp.bexio.com/authorize";
    private static string _token_url = "https://idp.bexio.com/token";
    private static string _callback_url = "https://www.myurl.com";

    private static string _scope = "monitoring_show";
    private static string _client_id = "myid";
    private static string _client_secret = "mysecret";
    static void Main(string[] args)
    {
        //request token
        var restclient = new RestClient(_auth_url);
        RestRequest request = new RestRequest("request/oauth") {Method = Method.POST};
        request.AddHeader("Accept", "application/json");
        request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
        request.AddParameter("client_id", _client_id);
        request.AddParameter("client_secret", _client_secret);
        request.AddParameter("grant_type", "client_credentials");
        var tResponse = restclient.Execute(request);
        var responseJson = tResponse.Content;
    }  

我无法弄清楚如何获得授权令牌并提供所需的所有信息。有人可以告诉我我所缺少的吗?

https://docs.bexio.com/#section/Authentication/Authorization-Code-Flow

1 个答案:

答案 0 :(得分:0)

您正尝试使用客户端凭据流,这对于无需用户验证的控制台应用程序很有意义。

但是,Bexio似乎仅支持授权代码流。这取决于浏览器重定向以验证用户身份并返回授权码。然后在subsequent token call中,传入client_id=<your client id>grant_type=authorization_codecode=<your code>

解决此问题的唯一方法是构建一个Web应用程序,充当授权部分的OAuth2客户端,显示返回的授权代码,而不是将其交换为令牌。让用户将代码复制/粘贴作为控制台应用程序的输入参数,然后在令牌调用中使用客户端凭据。

或者您需要在HTTP级别将authorize part授权代码流构建到控制台应用程序中。但这非常脆弱,因为授权服务器端的任何更改都可能会破坏控制台应用程序。