13

Я создаю веб-сайт ASP.NET MVC 5 с использованием Asp.net Identity (OWIN) и хочу поддерживать как традиционную аутентификацию имени пользователя, так и пароль, а также аутентификацию против Azure Active Directory. Это приложение не нуждается в аутентификации против идентификаторов Microsoft (Live ID), Facebook, Twitter или любого другого внешнего поставщика. Самый близкий вопрос SO, который я нашел, следующий: How to do both Azure Active Directory Single Sign On and Forms Authentications on ASP.NET MVCИдентификация Asp.net с использованием пароля и аутентификации Active Directory Azure

Я просмотрел образцы, которые создаются при создании проекта с использованием опции «Индивидуальные учетные записи пользователей», а также опции «Работа и учеба» в 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 { }); 

Я бы предположил, что существует относительно простой подход к этому, и я бы оценил некоторые идеи о том, с чего начать искать.

+1

Привет, Крис, вы когда-нибудь получали решение? –

+0

Привет, @ j.strugnell, я не получил решения для этого.В моем текущем приложении я аутентифицируюсь исключительно против AAD и не поддерживаю аутентификацию имени пользователя и пароля. Это традиционный образец, показанный в примерах, например, как показано ниже. – ChrisW

ответ

2

Я искал примеры из Microsoft. И все они выглядят как ваше решение. Посмотрите здесь:

  1. WebApp-WSFederation-DotNet
  2. WebApp-MultiTenant-OpenIdConnect-DotNet
  3. WebApp-OpenIDConnect-DotNet

Другим примером является here с WindowsAzureActiveDirectoryBearerAuthenticationOptions

+1

Я ценю ссылки, но я видел все это раньше. Моя проблема заключается не в том, что я не знаю, как реализовать AAD-аутентификацию. Я понимаю. Но реализация AAD со стандартным паролем auth в том же решении была вопросом, о котором я говорил, и ни одна из ваших ссылок не показывает этот сценарий. – ChrisW

+0

@ChrisW вы спросили, есть ли простой подход для этого. Итак, как я исследовал, ответ - нет. Ваше решение похоже на официальное. – Backs

+0

@ChrisW вы можете сообщить нам, если вы, наконец, получили это решение, и если да, то как? (т. е. использовали ли вы какую-либо из приведенных выше ссылок или ...?) Я пытаюсь сделать то же самое, но с посылкой AD и надеюсь, что смогу экстраполировать ваше решение, чтобы помочь с моим. Благодаря! –

2

Совсем недавно Damian Edwards из команды ASP.NET с открытым исходным кодом их community standup website on github. Они используют Azure AD, поэтому я надеюсь, что это поможет в правильном направлении, к сожалению, у меня нет никакого опыта с Azure AD.

Здесь также youtube video of the standup, где они говорят об этом, я думаю, что есть несколько советов и, возможно, подсказок, которые вы могли бы использовать.

+0

Мой комментарий к вашему ответу тот же, что я дал @Backs. Я понимаю, как реализовать AAD-аутентификацию. Но реализация аутентификации AAD в том же решении, что и стандартный пароль/cookie auth, является сердцем моей проблемы, и ваша ссылка не говорит об этом. – ChrisW

0

Я понимаю, что это старый вопрос. Я потенциально хочу сделать что-то подобное, но, вероятно, больше похоже на аутентификацию ASP.Net для более чем одного арендатора Azure AD. Я нашел это Integrating Azure AD into ASP.NET Core, где это утверждение:

... то рычаги воздействия на OnTokenValidated уведомления реализовать собственную логику проверки эмитента в зависимости от арендаторов Вы хотите поддержать (любой арендатор, счет Microsoft + конкретный список Azure AD, единый Azure AD, только учетная запись Microsoft и т. д.).

Смежные вопросы