Работая с Angular 5 в нашем приложении, мы проводим аутентификацию через Azure Active Directory (AAD), получая токен-носитель для доступа к внутреннему API.Мы не имеем никакого успеха в вызове аутентификации для API бэкэнда, получив 401 неаутрифицированных.App и Api размещены в Azure.Любая помощь будет полезна в устранении этой проблемы:
Служба приложений Регистрация на AAD:
Angular App (using the adal-angular5 1.0.36 library):
Application ID: aaaaa-aaaaa-aaaaa-aaaaa-aaaaa
Object ID: bbbbbb-bbbbb-bbbb-bbbbb-bbbbbb
App ID URI: https://frontendapp.azurewebsites.net
Home Page URL: https://homepage.frontendapp.com
Backend API (.Net 4.7):
Application ID: cccccc-cccccc-cccccc-cccccc-cccccc
Object ID: dddddd-ddddd-ddddd-dddddd-dddddd
App ID URI: https://backendapi.azurewebsites.net
Home Page URL: https://homepage.backendapi.com
Сторона приложения
config для adal-angular5 в приложении Angular:
config: adal.Config = {
tenant: 'common',
clientId: 'aaaaa-aaaaa-aaaaa-aaaaa-aaaaa',
postLogoutRedirectUri: window.location.origin,
endpoints: {
ApiUri: "https://homepage.backendapi.com",
}
};
Позвоните, чтобы получить токен на предъявителя:
this.adal5Service.acquireToken("https://backendapi.azurewebsites.net")
вызов API
мы проверили, что параметры содержат заголовок с токеном на предъявителя:
this.adal5HttpService.get('/api/hello', options);
на стороне API
мы используем библиотеку Microsoft Owin (пакет nuget Microsoft.Owin 4.0.0),
запуск API:
public partial class Startup
{
/// <summary>
/// Initializes OWIN authentication.
/// </summary>
/// <param name="app">Web API AppBuilder</param>
public void Configuration(IAppBuilder app)
{
if (app == null)
{
throw new ArgumentNullException("app");
}
app.UseWindowsAzureActiveDirectoryBearerAuthentication(
new WindowsAzureActiveDirectoryBearerAuthenticationOptions
{
Tenant = "common",
Audience = "https://backendapi.azurewebsites.net"
});
}
}
боковой контроллер API
[HttpGet]
[Authorize]
[Route("hello")]
public string GetHello()
{
try
{
var result = "we hit it yay!!!!!!!!!!!!!!!";
return result;
}
catch (Exception ex)
{
var msg = "not hit saddd.....";
var error = new Exception(msg, ex);
throw error;
}
}
С атрибутом [Authorize] мы получаем 401 несанкционированный, без дополнительного сообщения об ошибке.
Без атрибута [Authorize] мы применяем метод Controller просто отлично и получаем возвращаемые результаты.
Я смог подтвердить токен на предъявителя, отправленный из приложения, действительноПовторный токен мы получаем в шапке нашего Api.Я не могу понять, почему мы получаем несанкционированный.
Правильно ли настроен параметр конфигурации на APP или на стороне API?
Требуется ли дополнительная настройка в Azure?
Любая помощь будет признательна!