Ответ 1
Я искал примеры из Microsoft. И все они выглядят как ваше решение. Смотрите здесь:
Еще один пример здесь с WindowsAzureActiveDirectoryBearerAuthenticationOptions
Я создаю веб-сайт ASP.NET MVC 5 с использованием Asp.net Identity (OWIN) и хочу поддерживать как традиционную аутентификацию имени пользователя, так и пароль, а также аутентификацию с помощью Azure Active Directory. Это приложение не нуждается в аутентификации против идентификаторов Microsoft (Live ID), Facebook, Twitter или любого другого внешнего поставщика. Ближайшим вопросом SO, который я нашел, является следующий: Как выполнить однократный вход в Azure Active Directory и аутентификацию форм на ASP.NET MVC
Я просмотрел образцы, которые создаются при создании проекта с использованием опции "Индивидуальные учетные записи пользователей", а также опции "Работа и учеба" в VS 2015. У меня есть аутентификация, работающая хорошо индивидуально; это только когда я пытаюсь объединить их, что у меня проблемы.
В моем файле Startup_Auth.cs я настраиваю OWIN следующим образом:
public void ConfigureAuth(IAppBuilder app)
{
app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);
//app.UseCookieAuthentication(new CookieAuthenticationOptions { });
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ExternalCookie,
LoginPath = new PathString("/account/sign-in")
});
app.UseOpenIdConnectAuthentication(
new OpenIdConnectAuthenticationOptions
{
ClientId = clientId,
Authority = authority,
TokenValidationParameters = new System.IdentityModel.Tokens.TokenValidationParameters
{
ValidateIssuer = false,
},
Notifications = new OpenIdConnectAuthenticationNotifications()
{
SecurityTokenValidated = (context) =>
{
return Task.FromResult(0);
},
AuthorizationCodeReceived = (context) =>
{
return Task.FromResult(0);
},
AuthenticationFailed = (context) =>
{
context.OwinContext.Response.Redirect("/Home/Error");
context.HandleResponse(); // Suppress the exception
return Task.FromResult(0);
}
}
}
);
}
Эта конфигурация работает для аутентификации паролей, но не работает для аутентификации AAD. Чтобы включить аутентификацию AAD, мне нужно либо прокомментировать строку, задающую параметр AuthenticationType
AuthenticationType = DefaultAuthenticationTypes.ExternalCookie,
Или просто установите CookieAuthentication без значений.
app.UseCookieAuthentication(new CookieAuthenticationOptions { });
Я бы предположил, что существует относительно простой подход к этому, и я бы оценил некоторые идеи о том, где начать искать.
Я искал примеры из Microsoft. И все они выглядят как ваше решение. Смотрите здесь:
Еще один пример здесь с WindowsAzureActiveDirectoryBearerAuthenticationOptions
Совсем недавно Дамиан Эдвардс из команды ASP.NET открыл свой веб-сайт сообщества на github. Они используют Azure AD, поэтому я надеюсь, что это поможет в правильном направлении, я, к сожалению, не имею никакого опыта с Azure AD.
Вот также youtube video standup, где они говорят об этом, я думаю, что есть несколько советов и, возможно, подсказки, которые вы можете быть в состоянии использовать.
Я понимаю, что это старый вопрос. Я потенциально хочу сделать что-то подобное, но, вероятно, больше похоже на аутентификацию ASP.Net для более чем одного арендатора Azure AD. Я нашел это Интеграция Azure AD в ASP.NET Core, где это утверждение:
... затем используйте уведомление OnTokenValidated для реализации собственной логики проверки эмитента, в зависимости от того, какие арендаторы вы хотите поддерживать (любой арендатор, учетная запись Microsoft + конкретный список Azure AD, один Azure AD, только учетная запись Microsoft и т.д.)...
заставляет меня поверить, что пример кода может содержать ключ к этому смешанному сценарию auth.