httpclient token В этом запросе отказано в авторизации - PullRequest
0 голосов
/ 11 марта 2019

У меня есть API на веб-сайте MVC, который я создал с использованием аутентификации на основе токенов. Это прекрасно работает в одном из моих приложений, но в другом я получаю сообщение «В этом запросе отказано в авторизации».

Я получаю токен просто отлично, но при звонке я получаю вышеуказанную ошибку.

Вот тест, который я создал.

class TestApi
{
    private const string baseAddress = "http://localhost:50485";

    private const string baseApiAddress = baseAddress + "/api/DojoDbApi";
    async Task<string> GetToken(string userName, string password)
    {
        var keyValues = new List<KeyValuePair<string, string>>
        {
            new KeyValuePair<string, string>("username", userName),
            new KeyValuePair<string, string>("password", password),
            new KeyValuePair<string, string>("grant_type", "password")
        };
        var request = new HttpRequestMessage(HttpMethod.Post, "/oauth/token") { Content = new FormUrlEncodedContent(keyValues) };
        var client = new HttpClient { MaxResponseContentBufferSize = 256000, BaseAddress = new Uri(baseAddress) };

        var response = await client.SendAsync(request).ConfigureAwait(false);
        var content = await response.Content.ReadAsStringAsync();
        JObject jwtDynamic = JsonConvert.DeserializeObject<dynamic>(content);
        var accessToken = jwtDynamic.Value<string>("access_token");
        Debug.WriteLine(accessToken);

        return accessToken;
    }
    public async Task<string> GetHello(string userName, string password)
    {


        var accessToken = await GetToken(userName, password);
        var client = new HttpClient { MaxResponseContentBufferSize = 256000, BaseAddress = new Uri(baseApiAddress) };
        client.DefaultRequestHeaders.Accept.Clear();
        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

        try
        {
            // Add the Authorization header with the AccessToken.
            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
            var response = await client.GetAsync(new Uri(baseApiAddress + "/Hello"));
            var s = await response.Content.ReadAsStringAsync();
            Debug.WriteLine(s);
            return s;
        }
        catch (Exception ex)
        {
            Debug.WriteLine(@"              ERROR {0}", ex.Message);
            return ex.Message;
        }
    }

}

Что меня действительно смущает, так это то, что я могу получить доступ к API с помощью приложения Delphi.

1 Ответ

0 голосов
/ 12 марта 2019

Обсуждали это с другими разработчиками (на встрече ChesterDevs).

Это как-то связано с печеньем.

Если вы добавите? AspxAutoDetectCookieSupport = 1, вызов будет работать.

Если вы измените файл cookie в веб-конфигурации на «UseCookies», он будет работать нормально.

Как удалить AspxAutoDetectCookieSupport = 1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...