Поток Azure Active Directory для веб-приложения, запущенный из Office 365

Какой из потоков проверки подлинности Azure Active Directory я бы использовал для однопользовательского веб-приложения, которое должно вызывать API Microsoft Graph и запускаться из средства запуска приложений Office 365?

Office 365 использует тот же клиент, что и веб-приложение, а я использую конечную точку Azure AD v1. Пример, который я пробовал, не совсем подходит для этого сценария, потому что он ожидает, что пользователь еще не вошел в систему.

Я пробовал этот пример: https://github.com/microsoftgraph/aspnetcore-connect-sample

Он работает правильно при прямом переходе к приложению, но щелчок его значка в средстве запуска приложений Office 365 немедленно отображает следующую ошибку:

Exception: OpenIdConnectAuthenticationHandler: message.State is null or empty.

Является ли решение выходом пользователя из системы и повторной аутентификацией, чтобы получить код авторизации для кеширования, или вместо этого следует использовать поток «от имени»?


person dallasg    schedule 13.09.2017    source источник
comment
Привет, @dallasg, у нас возникли некоторые конфликты зависимости при попытке реализовать конечную точку аутентификации Azure AD v2 (MSAL). Вероятно, это будет решено с помощью netcore2.0, поэтому образец будет обновлен в ближайшие недели. Если вы столкнулись с этой ошибкой и в образце, отправьте сообщение о проблеме: github.com/microsoftgraph / aspnetcore-connect-sample / issues   -  person Mark Szabo    schedule 13.10.2017


Ответы (2)


Похоже, вы установили URL-адрес для входа непосредственно в URL-адрес домашней страницы для приложения без параметра state.

Чтобы решить эту проблему, рекомендуется установить домашнюю страницу приложения. Например, этот образец кода должен быть https://localhost:44334. Если вы хотите защитить веб-приложение и разрешить доступ только пользователям, прошедшим аутентификацию, мы можем заменить код в ConfigureServices методе, как показано ниже, и удалить атрибут AllowAnonymous в контроллере Home:

services.AddMvc(config =>
{
    var policy = new AuthorizationPolicyBuilder()
                     .RequireAuthenticatedUser()
                     .Build();
    config.Filters.Add(new AuthorizeFilter(policy));
});

После этого, когда вы заходите в приложение через портал приложений Office 365, оно сначала перенаправляет логин пользователей, прежде чем они смогут получить доступ к приложению.

person Fei Xue - MSFT    schedule 14.09.2017
comment
Я попытался добавить атрибут Authorize к HomeController, но он по-прежнему не аутентифицирует пользователя повторно. Я предполагаю, что из-за промежуточного программного обеспечения проверки подлинности файлов cookie. - person dallasg; 14.09.2017
comment
Вы удалили атрибут AllowAnonymous в действии Index контроллера Home? - person Fei Xue - MSFT; 15.09.2017

Мне удалось решить проблему, добавив URI Microsoft Graph в качестве параметра ресурса для промежуточного программного обеспечения OpenID Connect.

Теперь при запуске приложения отправляется код авторизации, который я могу сохранить в Token Cache и использовать позже для аутентификации в Graph API.

person dallasg    schedule 15.09.2017