Токен доступа OAuth2 в консольном приложении - PullRequest
1 голос
/ 13 марта 2020

Я пытаюсь создать консольное приложение C# dotnetcore для взаимодействия с API, который использует OAuth2 для авторизации. Я не совсем понял, как я могу использовать это для консольного приложения 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 / Аутентификация / Код авторизации-Поток

1 Ответ

0 голосов
/ 13 марта 2020

Вы пытаетесь использовать поток учетных данных клиента, который имеет смысл для консольного приложения без аутентификации пользователя.

Однако похоже, что Bexio поддерживает только поток кода авторизации. Это зависит от перенаправления браузера для аутентификации пользователя и возврата кода авторизации. Затем в последующем вызове токена вы передаете client_id=<your client id>, grant_type=authorization_code и code=<your code>.

. Единственный способ обойти это - создать веб-приложение, которое действует как клиент OAuth2 для части авторизации отображает возвращенный код авторизации, а не обменивает его на токен. Попросите пользователя скопировать / вставить этот код в качестве входного параметра в консольное приложение, которое затем использует учетные данные клиента в вызове токена.

Или вам потребуется создать часть авторизации потока кода авторизации в консольное приложение на уровне HTTP. Но это очень просто agile, так как любое изменение на стороне сервера авторизации, скорее всего, сломает консольное приложение.

...