У меня есть 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.