我正在尝试构建一个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
答案 0 :(得分:0)
您正尝试使用客户端凭据流,这对于无需用户验证的控制台应用程序很有意义。
但是,Bexio似乎仅支持授权代码流。这取决于浏览器重定向以验证用户身份并返回授权码。然后在subsequent token call中,传入client_id=<your client id>
,grant_type=authorization_code
和code=<your code>
。
解决此问题的唯一方法是构建一个Web应用程序,充当授权部分的OAuth2客户端,显示返回的授权代码,而不是将其交换为令牌。让用户将代码复制/粘贴作为控制台应用程序的输入参数,然后在令牌调用中使用客户端凭据。
或者您需要在HTTP级别将authorize part授权代码流构建到控制台应用程序中。但这非常脆弱,因为授权服务器端的任何更改都可能会破坏控制台应用程序。