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 | — | Ogólna dostępność | |||
.NET | Microsoft.IdentityModel | Microsoft.IdentityModel | — | 2 | 2 | Ogólna dostępność | |
ASP.NET Core | Microsoft.Identity.Web | Microsoft.Identity.Web | Szybki start | Ogólna dostępność | |||
Java | MSAL4J | msal4j | Szybki start | Ogólna dostępność | |||
Spring | spring-cloud-azure-starter-active-directory | spring-cloud-azure-starter-active-directory | Samouczek | Ogólna dostępność | |||
Node.js | Węzeł BIBLIOTEKI MSAL | msal-node | Szybki start | Ogólna dostępność | |||
Python | MSAL Python | msal | Ogólna dostępność | ||||
Python | tożsamość | tożsamość | Szybki start | -- |
(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 Azurehttps://login.microsoftonline.us/
dla instytucji rządowych USA na platformie Azurehttps://login.microsoftonline.de/
dla firmy Microsoft Entra Germanyhttps://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żbowymcommon
aby zalogować użytkowników przy użyciu dowolnego konta służbowego lub osobistego Microsoftconsumers
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-oidc
to . Przyczyną jest to , applicationUrl
http://localhost:3110
ale 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-oidc
wartość .
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.
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.Zaktualizuj kod w pliku ,
ConfigureServices
aby używałAddMicrosoftIdentityWebApp
metod iAddMicrosoftIdentityUI
.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();
W metodzie
Configure
w Startup.cs włącz uwierzytelnianie za pomocą wywołania metodyapp.UseAuthentication();
iapp.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 jestAzureAd
to .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 parametrusubscribeToOpenIdConnectMiddlewareDiagnosticsEvents
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 wHttpContext.User
programie .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).