Udostępnij za pośrednictwem


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

Dotyczy: Dzierżawcy siły roboczej Biały okrąg z szarym symbolem X. dzierżawcy zewnętrzni (White circle with a gray X symbol.dowiedz się więcej)

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 dotyczący
GitHub
Pakiet Uzyskiwanie
rozpoczął
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 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ść
Wiosna 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 MSAL Node 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óra Cię interesuje.

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:

  • Warto rozważyć instancję chmury, jeśli chcesz, aby twoja aplikacja działała na przykład w chmurach krajowych. 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 Microsoft Entra China obsługiwanego przez firmę 21Vianet
  • Odbiorcy w identyfikatorze dzierżawy. Opcje różnią się w zależności od tego, czy aplikacja jest jednodzierżawcza, czy wielodzierżawcza.
    • Identyfikator GUID dzierżawy uzyskany z portalu Azure do logowania użytkowników w Twojej organizacji. Można również użyć nazwy domeny.
    • organizations aby zalogować użytkowników na dowolnym koncie służbowym lub szkolnym
    • 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 autorytetu, będące połączeniem wartości wystąpienia i identyfikatora dzierżawcy.

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 portalu Azure identyfikatory URI przekierowania zarejestrowane na stronie Uwierzytelnianie dla Twojej aplikacji muszą być zgodne z tymi adresami URL. W przypadku dwóch poprzednich plików konfiguracji to będzie https://localhost:44321/signin-oidc. Przyczyną jest to, że applicationUrl jest http://localhost:3110, ale sslPort jest określony (44321). CallbackPath to /signin-oidc, zgodnie z definicją w appsettings.json.

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

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 platformy tożsamości Microsoft, które korzystają z Microsoft.Identity.Web, możesz pobrać wersję przedpremierową pakietu NuGet zawierającą szablony projektów dla platformy .NET 5.0. Następnie po zainstalowaniu można bezpośrednio stworzyć instancję 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 szablonu ASP.NET Core web w programie Visual Studio lub za pomocą poleceń dotnet new mvc --auth SingleOrg 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 ConfigureServices, aby używał metod AddMicrosoftIdentityWebApp 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 AddMicrosoftIdentityWebApp jest zdefiniowana w Microsoft.Identity.Web, który;

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

  • 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 na true spowoduje wyświetlenie, jak informacje są przetwarzane przez zestaw oprogramowania pośredniczącego ASP.NET Core w miarę, jak postępują od odpowiedzi HTTP do tożsamości użytkownika w programie HttpContext.User.

  • Metoda rozszerzenia AddMicrosoftIdentityUI jest zdefiniowana w Microsoft.Identity.Web.UI. Zapewnia on domyślny kontroler do obsługi logowania i wylogowywania.

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