Aplikacja internetowa, która loguje użytkowników: konfiguracja kodu

W tym artykule opisano sposób konfigurowania kodu dla aplikacji internetowej, która loguje użytkowników.

Biblioteki firmy Microsoft obsługujące aplikacje internetowe

Następujące biblioteki firmy Microsoft są używane do ochrony aplikacji internetowej (i internetowego interfejsu API):

Język/struktura Projekt w dniu
GitHub
Pakiet Coraz
pracę
Logowanie użytkowników Dostęp do interfejsów API sieci Web Ogólnie dostępne (ogólna dostępność) lub
Publiczna wersja zapoznawcza1
.NET MSAL.NET Microsoft.Identity.Client Biblioteka nie może zażądać tokenów identyfikatorów logowania użytkownika. Biblioteka może żądać tokenów dostępu dla chronionych internetowych interfejsów API. Ogólna dostępność
.NET Microsoft.IdentityModel Microsoft.IdentityModel Biblioteka nie może zażądać tokenów identyfikatorów logowania użytkownika.2 Biblioteka nie może żądać tokenów dostępu dla chronionych internetowych interfejsów API.2 Ogólna dostępność
ASP.NET Core ASP.NET Core Microsoft.AspNetCore.Authentication Szybki start Biblioteka może żądać tokenów identyfikatorów logowania użytkownika. Biblioteka nie może żądać tokenów dostępu dla chronionych internetowych interfejsów API. Ogólna dostępność
ASP.NET Core Microsoft.Identity.Web Microsoft.Identity.Web Szybki start Biblioteka może żądać tokenów identyfikatorów logowania użytkownika. Biblioteka może żądać tokenów dostępu dla chronionych internetowych interfejsów API. Ogólna dostępność
Java MSAL4J msal4j Szybki start Biblioteka może żądać tokenów identyfikatorów logowania użytkownika. Biblioteka może żądać tokenów dostępu dla chronionych internetowych interfejsów API. Ogólna dostępność
Spring spring-cloud-azure-starter-active-directory spring-cloud-azure-starter-active-directory Samouczek Biblioteka może żądać tokenów identyfikatorów logowania użytkownika. Biblioteka może żądać tokenów dostępu dla chronionych internetowych interfejsów API. Ogólna dostępność
Node.js Węzeł BIBLIOTEKI MSAL msal-node Szybki start Biblioteka może żądać tokenów identyfikatorów logowania użytkownika. Biblioteka może żądać tokenów dostępu dla chronionych internetowych interfejsów API. Ogólna dostępność
Python MSAL Python msal Biblioteka może żądać tokenów identyfikatorów logowania użytkownika. Biblioteka może żądać tokenów dostępu dla chronionych internetowych interfejsów API. Ogólna dostępność
Python tożsamość tożsamość Szybki start Biblioteka może żądać tokenów identyfikatorów logowania użytkownika. Biblioteka może żądać tokenów dostępu dla chronionych internetowych interfejsów API. --

(1) Uniwersalne postanowienia licencyjne dotyczące usług online mają zastosowanie do bibliotek w publicznej wersji zapoznawczej.

(2) Biblioteka Microsoft.IdentityModel weryfikuje tylko tokeny — nie może żądać identyfikatora ani tokenów dostępu.

Wybierz kartę odpowiadającą platformie, którą cię interesują:

Fragmenty kodu w tym artykule i następujące elementy są wyodrębniane z samouczka przyrostowego aplikacji internetowej platformy ASP.NET Core, rozdział 1.

Aby uzyskać szczegółowe informacje o implementacji, warto zapoznać się z tym samouczkiem.

Pliki konfiguracji

Aplikacje internetowe, które logują użytkowników przy użyciu Platforma tożsamości Microsoft, są konfigurowane za pomocą plików konfiguracji. Te pliki muszą określać następujące wartości:

  • Wystąpienie chmury, jeśli chcesz, aby aplikacja działała w chmurach krajowych, na przykład. Dostępne są różne opcje:
    • https://login.microsoftonline.com/ dla chmury publicznej platformy Azure
    • https://login.microsoftonline.us/ dla instytucji rządowych USA na platformie Azure
    • https://login.microsoftonline.de/ dla firmy Microsoft Entra Germany
    • https://login.partner.microsoftonline.cn/common dla firmy Microsoft Entra China obsługiwanych przez firmę 21Vianet
  • Odbiorcy w identyfikatorze dzierżawy. Opcje różnią się w zależności od tego, czy aplikacja jest jedną dzierżawą, czy wielodostępną.
    • Identyfikator GUID dzierżawy uzyskany w witrynie Azure Portal do logowania użytkowników w organizacji. Można również użyć nazwy domeny.
    • organizations aby zalogować użytkowników na dowolnym koncie służbowym
    • common aby zalogować użytkowników przy użyciu dowolnego konta służbowego lub osobistego Microsoft
    • consumers aby zalogować użytkowników tylko przy użyciu konta osobistego Microsoft
  • Identyfikator klienta aplikacji skopiowany z witryny Azure Portal

Mogą również zostać wyświetlone odwołania do urzędu, łączenie wartości wystąpienia i identyfikatora dzierżawy.

W ASP.NET Core te ustawienia znajdują się w pliku appsettings.json w sekcji "Microsoft Entra ID".

{
  "AzureAd": {
    "Instance": "https://login.microsoftonline.com/",
    "TenantId": "[Enter the tenantId here]",

    // Client ID (application ID) obtained from the Azure portal
    "ClientId": "[Enter the Client Id here]",
    "CallbackPath": "/signin-oidc",
    "SignedOutCallbackPath": "/signout-oidc"
  }
}

W programie ASP.NET Core inny plik (properties\launchSettings.json) zawiera adres URL (applicationUrl) i port TLS/SSL (sslPort) dla aplikacji i różnych profilów.

{
  "iisSettings": {
    "windowsAuthentication": false,
    "anonymousAuthentication": true,
    "iisExpress": {
      "applicationUrl": "http://localhost:3110/",
      "sslPort": 44321
    }
  },
  "profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "webApp": {
      "commandName": "Project",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      },
      "applicationUrl": "http://localhost:3110/"
    }
  }
}

W witrynie Azure Portal identyfikatory URI przekierowania zarejestrowane na stronie Uwierzytelnianie aplikacji muszą być zgodne z tymi adresami URL. W przypadku dwóch poprzednich plików konfiguracji będzie https://localhost:44321/signin-oidcto . Przyczyną jest to , applicationUrl http://localhost:3110ale sslPort jest określony (44321). CallbackPath to /signin-oidc, zgodnie z definicją w pliku appsettings.json.

W ten sam sposób identyfikator URI wylogowania zostanie ustawiony na https://localhost:44321/signout-oidcwartość .

Uwaga

Parametr SignedOutCallbackPath powinien być ustawiony na portal lub aplikację, aby uniknąć konfliktu podczas obsługi zdarzenia.

Kod inicjowania

Różnice kodu inicjowania są zależne od platformy. W przypadku ASP.NET Core i ASP.NET logowanie użytkowników jest delegowane do oprogramowania pośredniczącego OpenID Connect. Szablon ASP.NET lub ASP.NET Core generuje aplikacje internetowe dla punktu końcowego usługi Azure AD w wersji 1.0. Aby dostosować je do Platforma tożsamości Microsoft, wymagana jest konfiguracja.

W aplikacjach internetowych platformy ASP.NET Core (i internetowych interfejsach API) aplikacja jest chroniona, ponieważ masz Authorize atrybut na kontrolerach lub akcjach kontrolera. Ten atrybut sprawdza, czy użytkownik jest uwierzytelniony. Przed wydaniem platformy .NET 6 inicjowanie kodu znajdowało się w pliku Startup.cs . Nowe projekty ASP.NET Core z platformą .NET 6 nie zawierają już pliku Startup.cs . Jego miejscem jest plik Program.cs . Pozostała część tego samouczka dotyczy platformy .NET 5 lub starszej wersji.

Uwaga

Jeśli chcesz zacząć bezpośrednio od nowych szablonów platformy ASP.NET Core dla Platforma tożsamości Microsoft, które korzystają z witryny Microsoft.Identity.Web, możesz pobrać pakiet NuGet w wersji zapoznawczej zawierający szablony projektów dla platformy .NET 5.0. Następnie po zainstalowaniu można bezpośrednio utworzyć wystąpienie aplikacji internetowych ASP.NET Core (MVC lub Blazor). Aby uzyskać szczegółowe informacje, zobacz Szablony projektów aplikacji internetowej Microsoft.Identity.Web. Jest to najprostsze podejście, ponieważ wykona wszystkie poniższe kroki.

Jeśli wolisz rozpocząć projekt przy użyciu bieżącego domyślnego projektu internetowego ASP.NET Core w programie Visual Studio lub przy użyciu dotnet new mvc --auth SingleOrg polecenia lub dotnet new webapp --auth SingleOrg, zobaczysz kod podobny do następującego:

 services.AddAuthentication(AzureADDefaults.AuthenticationScheme)
         .AddAzureAD(options => Configuration.Bind("AzureAd", options));

Ten kod używa starszego pakietu NuGet Microsoft.AspNetCore.Authentication.AzureAD.UI , który służy do tworzenia aplikacji usługi Azure Active Directory w wersji 1.0. W tym artykule wyjaśniono, jak utworzyć aplikację Platforma tożsamości Microsoft w wersji 2.0, która zastępuje ten kod.

  1. Dodaj pakiety NuGet Microsoft.Identity.Web i Microsoft.Identity.Web.UI do projektu. Usuń pakiet NuGet, Microsoft.AspNetCore.Authentication.AzureAD.UI jeśli jest obecny.

  2. Zaktualizuj kod w pliku , ConfigureServices aby używał AddMicrosoftIdentityWebApp metod i AddMicrosoftIdentityUI .

    public class Startup
    {
     ...
     // This method gets called by the runtime. Use this method to add services to the container.
     public void ConfigureServices(IServiceCollection services)
     {
      services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
             .AddMicrosoftIdentityWebApp(Configuration, "AzureAd");
    
      services.AddRazorPages().AddMvcOptions(options =>
      {
       var policy = new AuthorizationPolicyBuilder()
                     .RequireAuthenticatedUser()
                     .Build();
       options.Filters.Add(new AuthorizeFilter(policy));
      }).AddMicrosoftIdentityUI();
    
  3. W metodzie Configure w Startup.cs włącz uwierzytelnianie za pomocą wywołania metody app.UseAuthentication(); i app.MapControllers();.

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
     // more code here
     app.UseAuthentication();
     app.UseAuthorization();
    
     app.MapRazorPages();
     app.MapControllers();
     // more code here
    }
    

W tym kodzie:

  • Metoda rozszerzenia jest zdefiniowana AddMicrosoftIdentityWebApp w pliku Microsoft.Identity.Web, który;

    • Konfiguruje opcje odczytu pliku konfiguracji (tutaj w sekcji "Microsoft Entra ID")
    • Konfiguruje opcje OpenID Connect tak, aby urząd był Platforma tożsamości Microsoft.
    • Weryfikuje wystawcę tokenu.
    • Gwarantuje, że oświadczenia odpowiadające nazwie są mapowane z preferred_username oświadczenia w tokenie identyfikatora.
  • Oprócz obiektu konfiguracji można określić nazwę sekcji konfiguracji podczas wywoływania metody AddMicrosoftIdentityWebApp. Domyślnie jest AzureAdto .

  • AddMicrosoftIdentityWebApp ma inne parametry dla zaawansowanych scenariuszy. Na przykład śledzenie zdarzeń oprogramowania pośredniczącego OpenID Connect może pomóc w rozwiązywaniu problemów z aplikacją internetową, jeśli uwierzytelnianie nie działa. Ustawienie opcjonalnego parametru subscribeToOpenIdConnectMiddlewareDiagnosticsEvents true spowoduje wyświetlenie sposobu przetwarzania informacji przez zestaw oprogramowania pośredniczącego ASP.NET Core w miarę postępu odpowiedzi HTTP na tożsamość użytkownika w HttpContext.Userprogramie .

  • Metoda rozszerzenia jest definiowana AddMicrosoftIdentityUI w interfejsie użytkownika Microsoft.Identity.Web.UI. Zapewnia on domyślny kontroler do obsługi logowania i wylogowywanie.

Aby uzyskać więcej informacji na temat sposobu tworzenia aplikacji internetowych w witrynie Microsoft.Identity.Web, zobacz Web Apps in microsoft-identity-web (Aplikacje internetowe w witrynie microsoft-identity-web).

Następny krok