13

Buduję witrynę ASP.NET MVC 5 za pomocą Asp.net Identity (OWIN) i chcę obsługiwać zarówno tradycyjne uwierzytelnianie nazwy użytkownika/hasła, jak i uwierzytelnianie przeciwko Azure Active Directory. Ta aplikacja nie musi uwierzytelniać się przy użyciu identyfikatorów Microsoft ID (Live ID), Facebooka, Twittera ani żadnego z zewnętrznych dostawców. Najbliższe pytanie, które znalazłem, to to: How to do both Azure Active Directory Single Sign On and Forms Authentications on ASP.NET MVCIdentyfikacja Asp.net przy użyciu hasła i uwierzytelnianie Active Directory Azure

Przyjrzałem się próbkom utworzonym podczas tworzenia projektu za pomocą opcji "Indywidualne konta użytkowników" oraz opcji "Konta pracy i szkoły" w VS 2015. Mam uwierzytelnianie działające dobrze indywidualnie; to tylko wtedy, gdy próbuję je połączyć, że mam problemy.

W moim pliku Startup_Auth.cs, jestem konfigurowania OWIN tak:

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); 
        } 
       } 
      } 
     ); 
    } 

Ta konfiguracja działa dla uwierzytelniania hasłem, ale nie działa dla uwierzytelniania AAD. Aby włączyć uwierzytelnianie AAD muszę albo zakomentuj określający AuthenticationType

AuthenticationType = DefaultAuthenticationTypes.ExternalCookie, 

Albo po prostu ustawić CookieAuthentication bez wartości.

app.UseCookieAuthentication(new CookieAuthenticationOptions { }); 

Przypuszczam, że istnieje stosunkowo proste podejście do tego i docenią niektóre pomysły, od czego zacząć szukać.

+1

Witam Chris, czy kiedykolwiek dostałeś rozwiązanie tego problemu? –

+0

Witam, @ j.strugnell, nie znalazłem rozwiązania tego problemu.W mojej bieżącej aplikacji uwierzytelniam się wyłącznie przeciwko AAD i nie obsługuję uwierzytelniania nazwy użytkownika/hasła. Jest to tradycyjna próbka pokazana w przykładach, na przykład jak poniżej. – ChrisW

Odpowiedz

2

Przeszukałem przykłady od firmy Microsoft. I wszystkie wyglądają jak twoje rozwiązanie. Spójrz tutaj:

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

Innym przykładem jest here z WindowsAzureActiveDirectoryBearerAuthenticationOptions

+1

Doceniam linki, ale widziałem je wszystkie wcześniej. Moim problemem nie jest to, że nie wiem, jak zaimplementować uwierzytelnianie AAD. Rozumiem. Ale zaimplementowanie AAD przy użyciu standardowego hasła w tym samym rozwiązaniu było tym, o co w tym wszystkim chodziło i żaden z twoich linków nie pokazuje tego scenariusza. – ChrisW

+0

@ Chris zapytał, czy istnieje proste podejście do tego. Tak więc, jak badano, odpowiedź brzmi: nie. Twoje rozwiązanie jest podobne do oficjalnego. – Backs

+0

@ChrisW, czy możesz nam powiedzieć, czy w końcu udało Ci się to rozwiązać, a jeśli tak, to w jaki sposób? (czy używałeś któregoś z powyższych linków, lub ...?) Próbuję zrobić to samo, ale z założeniem AD i mam nadzieję, że mogę ekstrapolować z twojego rozwiązania, by pomóc mi. Dzięki! –

2

niedawno Damian Edwards z zespołu ASP.NET open source ich community standup website on github. Korzystają z usługi Azure AD, więc mam nadzieję, że pomoże to we właściwym kierunku. Niestety nie mam żadnego doświadczenia z usługą Azure AD.

Tutaj jest również youtube video of the standup, gdzie mówią o tym, myślę, że jest kilka wskazówek i może wskazówek, które mogą być w stanie wykorzystać.

+0

Mój komentarz dotyczący Twojej odpowiedzi jest taki sam, jak podałem @Backs. Rozumiem, jak zaimplementować uwierzytelnianie AAD. Ale implementacja uwierzytelniania AAD w tym samym rozwiązaniu, co standardowe hasło/autoryzacja cookie jest sercem mojego problemu, a twój link nie mówi do tego. – ChrisW

0

Zdaję sobie sprawę, że jest to stare pytanie. Potencjalnie zamierzam zrobić coś podobnego, ale prawdopodobnie bardziej jak uwierzytelnienie tożsamości ASP.Net dla więcej niż jednego dzierżawcy Azure AD. Znalazłem ten Integrating Azure AD into ASP.NET Core gdzie to stwierdzenie:

... następnie wykorzystać OnTokenValidated powiadomienia zaimplementować własną logikę walidacji emitenta w zależności od najemcy chcesz wesprzeć (dowolny najemcy, konto Microsoft + konkretną listę Azure AD, pojedyncza usługa Azure AD, tylko konto Microsoft itp.) ...

prowadzi mnie do przekonania, że ​​kod przykładowy może zawierać klucz do tego mieszanego scenariusza auth.