Какой из потоков проверки подлинности 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.
Является ли решение выходом пользователя из системы и повторной аутентификацией, чтобы получить код авторизации для кеширования, или вместо этого следует использовать поток "от имени"?
Ответ 1 · Fei Xue - MSFT
Похоже, вы установили 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, оно сначала перенаправляет логин пользователей, прежде чем они смогут получить доступ к приложению.
Ответ 2 · dallasg
Мне удалось решить проблему, добавив URI Microsoft Graph в качестве параметра ресурса для промежуточного программного обеспечения OpenID Connect.
Теперь при запуске приложения отправляется код авторизации, который я могу сохранить в Token Cache и использовать позже для аутентификации в Graph API.