Ошибка авторизации токена 401 от приложения Angular5 к внутреннему API .Net 4.7 - PullRequest
0 голосов
/ 07 июня 2018

Работая с 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?
Любая помощь будет признательна!

...