Айв создал базовое веб-приложение .NET, которое использует Azure AD для идентификации. Все работает нормально, как и ожидалось, и все, что я украшаю с помощью [Authroize], защищено.
Теперь я хочу защитить один из моих контроллеров API, чтобы он был доступен из внешней службы.
Я следил за этим руководством, в котором объясняется аутентификация сервис-сервис.
Служба для авторизация службы с помощью Azure AD
Используя это, мне удалось запросить токен
POST https://login.microsoftonline.com/{TENANTID}/oauth2/token
grant_type=client_credentials
&client_id={CLIENTID}
&client_secret={CLIENTSECRET}
&resource=https%3A%2F%mydirectory.onmicrosoft.com/myappname
Запустив это с почтальоном, я получаю Bearer access_token, так что выглядит хорошо.
Теперь, если я вызову свое веб-приложение в Postman с этим токеном-носителем в заголовке,
GET https://localhost:44392/api/booking
Authorization Bearer {access_token}
Я получаю ответ в формате HTML от одного из диалогов Microsoft. Кажется, что он просто переходит в цикл перенаправления, поэтому теперь я не понимаю, есть ли у меня проблема с конфигурацией в запросе токена или мое веб-приложение нужно настроить по-другому. В статье здесь упоминается что-то о разрешениях в файле манифеста, но я не понимаю, зачем это нужно?
Некоторые дополнительные моменты
- Мое веб-приложение и POST для токена используют один и тот же идентификатор клиента AD.
- Я пробовал разные приложения AD для каждой функции (Web и Service-to-Service), но, похоже, это не имело никакого значения.
- Если я просто выполняю стандартный вход в систему в браузере, конечная точка API разрешается, как и ожидалось.
Любая помощь приветствуется!
Обновления:
Мне удалось попробовать приложение Daemon .NET 4.5, и это сработало безупречно с использованием UseWindowsAzureActiveDirectoryBearerToken.
Служба демона для аутентификации службы в .NET 4.5
Однако в моем приложении .NET Core это промежуточное ПО недоступно, поэтому я попытался использовать промежуточное ПО JwtBearer, но все равно получаю запрос на вход.
app.UseJwtBearerAuthentication(new JwtBearerOptions
{
Audience = "https://localhost:44392",
Authority = "https://login.microsoftonline.com/{TENANTNAME}.onmicrosoft.com"
});
Как видите, я установил только 2 свойства в BearerOptions, но я считаю, что их должно было быть достаточно для [авторизации] моей конечной точки API.