Я пытаюсь защитить веб-API ASP.NET, используя поставщиков OWIN для Windows Azure Active Directory. Я настроил веб-API для использования токенов-носителей Windows Azure JWT, как показано ниже:
public void Configuration(IAppBuilder app)
{
app.UseWindowsAzureBearerToken(new WindowsAzureJwtBearerAuthenticationOptions()
{
Audience = "http://mywebsitename.azurewebsites.net",
Tenant = "mydefaultdirectory.onmicrosoft.com"
});
}
Затем я создал клиентское приложение, принадлежащее тому же каталогу, что и клиент веб-API. Я указал разрешения для предоставления клиентскому приложению доступа к веб-API. Проблема возникла, когда я попытался создать клиентское приложение и пройти аутентификацию в API.
Клиент представляет собой простое приложение для магазина Windows с методом нажатия кнопки для аутентификации в Windows Azure, а код для щелчка приведен ниже:
private async void myButton_Click(object sender, RoutedEventArgs e)
{
AuthenticationContext ac = new AuthenticationContext("https://login.windows.net/nameofazureactivedirectorytenant");
AuthenticationResult ar =
await ac.AcquireTokenAsync("api/pathtoresource",
"xxxxxxxx-xxxx-xxxxx-xxxx-xxxxxxxxxxxx");
// Call Web API
string authHeader = ar.CreateAuthorizationHeader();
HttpClient client = new HttpClient();
HttpRequestMessage request = new HttpRequestMessage(
HttpMethod.Get, "http://mywebsitename.azurewebsites.net/api/pathtoresource");
request.Headers.TryAddWithoutValidation("Authorization", authHeader);
HttpResponseMessage response = await client.SendAsync(request);
string responseString = await response.Content.ReadAsStringAsync();
}
Приложение не может правильно создать контекст аутентификации, поэтому я считаю, что передаю ему неправильный параметр. Я просмотрел несколько сообщений в блогах и ответы SO, но пока ничего не сработало, любая помощь будет оценена по достоинству!