13

Stworzyłem aplikację ASP.Net MVC5, w której skonfigurowałem (i działam dobrze) indywidualne konta użytkowników za pośrednictwem Google, Facebooka itp.Obsługa indywidualnych kont użytkowników i kont organizacji w MVC5/ASP.Net Identity 2

Co chcę zrobić, to również obsługa uwierzytelniania w usłudze Azure Active Directory (konta organizacyjne). To byłoby dla personelu wewnętrznego, aby móc zalogować się do aplikacji jako administratorzy.

Wszystkie istniejące informacje/poradniki/dokumentacja, które znalazłem, zazwyczaj dotyczą użycia jednego z nich. Jak mógłbym je oba razem?

Jeśli istnieje osobny formularz logowania dla każdego rodzaju użytkownika, nie stanowi to problemu.

EDIT:

Szukałem w konfiguracji aplikacji w portalu Azure Active Directory, a zauważysz, że określają one "OAuth 2.0 AUTORYZACYJNEGO Endpoint". Czy MVC5 może być skonfigurowany w ramach Startup.Auth.cs, aby z niego skorzystać?

Odpowiedz

4

udało mi się wdrożyć to w następujący sposób:

Pierwszy, dodając odniesienie do pakietu Microsoft.Owin.Security.OpenIdConnect Nuget.

drugie, konfigurowania go w moim Startup.Auth.cs:

app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions 
{ 
    ClientId = "From the Azure Portal (see below)", 
    Authority = "https://login.windows.net/<domain>.onmicrosoft.com", 
    Notifications = new OpenIdConnectAuthenticationNotifications 
    { 
     RedirectToIdentityProvider = (ctx) => 
     { 
      if (ctx.Request.Path.Value.EndsWith("ExternalLogin")) 
      { 
       string appBasePathUrl = ctx.Request.Scheme + "://" + ctx.Request.Host + ctx.Request.PathBase; 
       ctx.ProtocolMessage.RedirectUri = appBasePathUrl + "/"; 
       ctx.ProtocolMessage.PostLogoutRedirectUri = appBasePathUrl; 
      } 
      else 
      { 
       ctx.State = NotificationResultState.Skipped; 
       ctx.HandleResponse(); 
      } 

      return Task.FromResult(0); 
     } 
    }, 
    Description = new AuthenticationDescription 
    { 
     AuthenticationType = "OpenIdConnect", 
     Caption = "SomeNameHere" 
    } 
}); 

trzecie, że konfiguracja aplikacji w portalu Azure (klasyczny):

Azure Active Directory Application Configuration

czwarte, Dodałem osobną stronę logowania dla administratorów:

@using (Html.BeginForm("ExternalLogin", "Home")) 
{ 
    @Html.AntiForgeryToken() 
    <div class="ui basic segment"> 
     <div class="ui list"> 
      <div class="item"> 
       <button type="submit" name="provider" value="OpenIdConnect" class="left floated huge ui button social"> 
        <i class="windows icon"></i> 
        <span>My Org Name</span> 
       </button> 
      </div> 
     </div> 
    </div> 
} 

piąte, akcja ExternalLogin nie trzeba zmieniać - po prostu niech OWIN middleware przekierować nas na stronę logowania zewnętrznego. Przepływ następnie przekieruje użytkownika z powrotem do akcji ExternalLoginCallback.

Wreszcie, w akcji ExternalLoginCallback, sprawdzić przychodzące żądania, aby określić, że logowanie było poprzez Azure AD, a zamiast dzwonić do tożsamości ASP.NET, I zbudować moich własnych ClaimsIdentity, która posiada wszystkie moje (aplikację specyficzne) informacje o roszczeniach, które moja aplikacja rozpoznaje jako administrator.

Teraz użytkownicy administracyjni przechodzą na stronę https://example.com/admin, klikając przycisk logowania, są przekierowywani do logowania Azure AD i przechodzą z powrotem do aplikacji jako administrator.

0

Najlepszym rozwiązaniem byłoby wykorzystanie usług kontroli dostępu Azue AD (ACS) i skonfigurowanie dostawców tożsamości do włączenia usługi Azure AD, Facebook i innych. Zobacz dokumentację tutaj: http://azure.microsoft.com/en-us/documentation/articles/active-directory-dotnet-how-to-use-access-control/

+0

Tak, rzuciłem okiem na to. Naprawdę starałem się tego uniknąć - wrażenia użytkownika nie pasują do tego, co chcę osiągnąć. –

+0

Możliwe, że będziesz w stanie przetasować swoje własne narzędzie wykorzystując coś w rodzaju serwera tożsamości Thinktecture (http://thinktecture.github.io/Thinktecture.IdentityServer.v2/). Minusem jest to, że nie jest już hostowaną usługą i musisz podawać i utrzymywać serwer działający jako moduł obsługi uwierzytelniania. –

0

ACS może być rzeczywiście używany, jednak jak już zaimplementowano Google/Facebook signin Polecam, abyś bezpośrednio zintegrował się z Azure AD zamiast przechodzić przez pośredni STS, taki jak ACS/thinktecture.

Jeśli Twoja aplikacja korzysta z logowania, kliknij ikonę "Podpisz się za pomocą Google/Signin with Facebook" - możesz dodać konto "Zaloguj się z firmą". " (jest nawet zalecany styl brandingu: http://msdn.microsoft.com/en-us/library/azure/dn132598.aspx Jeśli aplikacja wykonuje wykrywanie dziedziny i przekazuje użytkownika do odpowiedniego dostawcy tożsamości (używając pola tekstowego mówiącego coś w stylu "Podaj swój adres e-mail, aby się zalogować") - możesz dodać dopasowanie do swojego nazwa firmy adresy e-mail i przekazywanie tych użytkowników do AAD.

W obu przypadkach Twoja aplikacja wyśle ​​żądanie SSO do punktu końcowego SSO AAD: https://login.windows.net/ {nazwa domeny firmy/identyfikator}/{wsfed/saml/oauth2}. używasz NET, WSFed, powinien to zobaczyć Cię przez: http://msdn.microsoft.com/en-us/library/azure/dn151789.aspx Poszukaj kodu.

SignInRequestMessage sirm = FederatedAuthentication.WSFederationAuthenticationModule.CreateSignInRequest("", HttpContext.Request.RawUrl, false); 
result = Redirect(sirm.RequestUrl.ToString()); 

jest też OpenIdConnect spróbować tutaj: http://msdn.microsoft.com/en-us/library/azure/dn151789.aspx

Powiązane problemy