Получить токен для Oauth2 - сбой UrlDecoding параметров формы из сообщения запроса. Параметры формы должны быть закодированы в URL - PullRequest
0 голосов
/ 07 ноября 2018

Я использую C #, RestSharp, чтобы получить токен на предъявителя для сока, представленного RestAPI. Вот мой фрагмент кода

        var client = new RestClient("https://url/oauth2/token");
        var request = new RestRequest(Method.POST);
        request.AddHeader("cache-control", "no-cache");
        request.AddHeader("content-type", "application/x-www-form-urlencoded");
        request.AddHeader("Authorization", "Basic clientusername:clientpassword");

        request.AddParameter("application/x-www-form-urlencoded", "grant_type=password&username=user&password=pwd", ParameterType.RequestBody);
        IRestResponse response = client.Execute(request);

Но не повезло - всегда получайте ошибку ниже

{"fault":{"faultstring":"UrlDecoding of the form parameters from the request message failed. The form parameters needs to be url encoded","detail":{"errorcode":"steps.oauth.v2.InvalidRequest"}}}

Я использовал psotman с теми же учетными данными, и он работал нормально !! Есть идеи?

1 Ответ

0 голосов
/ 08 ноября 2018

Возможно, вам потребуется использовать свойство Authenticator. Попробуйте это

var client = new RestClient($"{_apiBaseUrl}/token")
        {
            Authenticator = new HttpBasicAuthenticator(_clientId, _clientSecret)
        };

        var request = new RestRequest(Method.POST);
        request.AddHeader("cache-control", "no-cache");
        request.AddHeader("content-type", "application/x-www-form-urlencoded");
        request.AddParameter("application/x-www-form-urlencoded", $"grant_type=password&username={username}&password={password}&scope=trust", ParameterType.RequestBody);

        var response = client.Execute(request);
...