Samouczek: przygotowywanie aplikacji internetowej ASP.NET Core do uwierzytelniania w dzierżawie zewnętrznej
Ten samouczek jest częścią 2 serii, która pokazuje, jak utworzyć aplikację internetową ASP.NET Core i przygotować ją do uwierzytelniania przy użyciu centrum administracyjnego firmy Microsoft Entra. W części 1 tej serii zarejestrowano aplikację i skonfigurowano przepływy użytkowników w dzierżawie zewnętrznej. W tym samouczku pokazano, jak utworzyć aplikację internetową platformy ASP.NET Core i skonfigurować ją do uwierzytelniania.
W tym samouczku wykonasz następujące instrukcje:
- Tworzenie projektu ASP.NET Core w programie Visual Studio Code
- Dodawanie wymaganych pakietów NuGet
- Konfigurowanie ustawień aplikacji
- Dodawanie kodu w celu zaimplementowania uwierzytelniania
Wymagania wstępne
- Samouczek: przygotowywanie dzierżawy zewnętrznej do tworzenia aplikacji internetowej platformy ASP.NET Core.
- Mimo że można używać dowolnego zintegrowanego środowiska projektowego (IDE), które obsługuje aplikacje ASP.NET Core, w tym samouczku jest używany program Visual Studio Code. Możesz go pobrać tutaj.
- Zestaw .NET 7.0 SDK.
Tworzenie projektu platformy ASP.NET Core
Otwórz program Visual Studio Code, wybierz pozycję Plik>Otwórz folder.... Przejdź do i wybierz lokalizację, w której chcesz utworzyć projekt.
Otwórz nowy terminal, wybierając pozycję Terminal>Nowy terminal.
Wprowadź następujące polecenie, aby utworzyć projekt MVC (Model View Controller) ASP.NET Core.
dotnet new mvc -n dotnetcore_webapp
Instalowanie pakietów tożsamości
Pakiety NuGet powiązane z tożsamościami muszą być zainstalowane w projekcie, aby uwierzytelnić użytkowników.
Wprowadź następujące polecenia, aby przejść do folderu dotnetcore_webapp i zainstalować odpowiedni pakiet NuGet:
cd dotnetcore_webapp dotnet add package Microsoft.Identity.Web.UI
Konfigurowanie aplikacji pod kątem uwierzytelniania
Otwórz plik appsettings.json i zastąp istniejący kod poniższym fragmentem kodu.
{ "AzureAd": { "Authority": "https://Enter_the_Tenant_Subdomain_Here.ciamlogin.com/", "ClientId": "Enter_the_Application_Id_Here", "ClientCredentials": [ { "SourceType": "ClientSecret", "ClientSecret": "Enter_the_Client_Secret_Here" } ], "CallbackPath": "/signin-oidc", "SignedOutCallbackPath": "/signout-callback-oidc" }, "Logging": { "LogLevel": { "Default": "Information", "Microsoft.AspNetCore": "Warning" } }, "AllowedHosts": "*" }
Authority
— Wystąpienie dostawcy tożsamości i odbiorcy logowania dla aplikacji. ZastąpEnter_the_Tenant_Subdomain_Here
ciąg poddomeną dzierżawy zewnętrznej. Aby to znaleźć, wybierz pozycję Przegląd w menu paska bocznego, a następnie przejdź do karty Przegląd. Znajdź domenę podstawową w formularzu caseyjensen.onmicrosoft.com. Poddomena jest caseyjensen.ClientId
— Identyfikator aplikacji, nazywany również klientem. Zastąp tekst w cudzysłowach wartością identyfikatora aplikacji (klienta), która została zarejestrowana wcześniej na stronie przeglądu zarejestrowanej aplikacji.ClientSecret
— wartość wpisu tajnego klienta utworzonego w sekcji Przygotowywanie dzierżawy. Zastąp tekst w cudzysłowach wartością wpisu tajnego klienta w centrum administracyjnym firmy Microsoft Entra.CallbackPath
— Jest identyfikatorem, który pomaga serwerowi przekierować odpowiedź do odpowiedniej aplikacji.
Zapisz zmiany w pliku.
Otwórz plik Właściwości/launchSettings.json.
https
W sekcji programuprofiles
zmieńhttps
adres URL wapplicationUrl
pliku , tak aby odczytałhttps://localhost:7274
wartość . Ten adres URL został użyty do zdefiniowania identyfikatora URI przekierowania.Zapisz zmiany w pliku.
Użyj niestandardowej domeny adresu URL (opcjonalnie)
Użyj domeny niestandardowej, aby w pełni oznaczyć adres URL uwierzytelniania. Z perspektywy użytkownika użytkownicy pozostają w domenie podczas procesu uwierzytelniania, a nie przekierowywani do ciamlogin.com nazwy domeny.
Wykonaj następujące kroki, aby użyć domeny niestandardowej:
Wykonaj kroki opisane w temacie Włączanie niestandardowych domen url dla aplikacji w dzierżawach zewnętrznych, aby włączyć niestandardową domenę adresu URL dla dzierżawy zewnętrznej.
Otwórz plik appsettings.json :
- Zaktualizuj wartość
Authority
właściwości na https://Enter_the_Custom_Domain_Here/Enter_the_Tenant_ID_Here. ZastąpEnter_the_Custom_Domain_Here
ciąg domeną niestandardowego adresu URL iEnter_the_Tenant_ID_Here
identyfikatorem dzierżawy. Jeśli nie masz identyfikatora dzierżawy, dowiedz się, jak odczytywać szczegóły dzierżawy. - Dodaj
knownAuthorities
właściwość o wartości [Enter_the_Custom_Domain_Here].
- Zaktualizuj wartość
Po wprowadzeniu zmian w pliku appsettings.json , jeśli domena niestandardowego adresu URL jest login.contoso.com, a identyfikator dzierżawy to aaaabbbb-0000-cccc-1111-dddd2222eeeee, plik powinien wyglądać podobnie do następującego fragmentu kodu:
{
"AzureAd": {
"Authority": "https://login.contoso.com/aaaabbbb-0000-cccc-1111-dddd2222eeee",
"ClientId": "Enter_the_Application_Id_Here",
"ClientCredentials": [
{
"SourceType": "ClientSecret",
"ClientSecret": "Enter_the_Client_Secret_Here"
}
],
"CallbackPath": "/signin-oidc",
"SignedOutCallbackPath": "/signout-callback-oidc",
"KnownAuthorities": ["login.contoso.com"]
},
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*"
}
Dodawanie autoryzacji do HomeController.cs
Plik HomeController.cs zawiera kod strony głównej aplikacji i musi mieć możliwość autoryzowania użytkownika. Microsoft.AspNetCore.Authorization
Przestrzeń nazw udostępnia klasy i interfejsy do implementowania autoryzacji w aplikacji internetowej, a [Authorize]
atrybut służy do określania, że tylko uwierzytelnieni użytkownicy mogą używać aplikacji internetowej.
W edytorze kodu otwórz plik Controllers\HomeController.cs .
Do kontrolera należy dodać autoryzację,
Microsoft.AspNetCore.Authorization
aby górna część pliku jest identyczna z następującym fragmentem kodu:using System.Diagnostics; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using dotnetcore_webapp.Models;
Ponadto dodaj
[Authorize]
atrybut bezpośrednio nad definicjąHomeController
klasy.[Authorize]
Dodawanie uwierzytelniania i autoryzacji do Program.cs
Należy zmodyfikować Program.cs , aby dodać uwierzytelnianie i autoryzację do aplikacji internetowej. Obejmuje to dodawanie przestrzeni nazw na potrzeby uwierzytelniania i autoryzacji oraz możliwość logowania użytkowników przy użyciu Platforma tożsamości Microsoft.
Aby dodać wymagane przestrzenie nazw, otwórz Program.cs i dodaj następujący fragment kodu na początku pliku:
using Microsoft.AspNetCore.Authentication.OpenIdConnect; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc.Authorization; using Microsoft.Identity.Web; using Microsoft.Identity.Web.UI; using System.IdentityModel.Tokens.Jwt;
Następnie dodaj usługi uwierzytelniania do aplikacji, która umożliwi aplikacji internetowej logowanie użytkowników przy użyciu Platforma tożsamości Microsoft. Resztę kodu możesz zastąpić w Program.cs następującym fragmentem kodu:
var builder = WebApplication.CreateBuilder(args); // Add services to the container. builder.Services.AddControllersWithViews(); // This is required to be instantiated before the OpenIdConnectOptions starts getting configured. // By default, the claims mapping will map claim names in the old format to accommodate older SAML applications. // For instance, 'http://schemas.microsoft.com/ws/2008/06/identity/claims/role' instead of 'roles' claim. // This flag ensures that the ClaimsIdentity claims collection will be built from the claims in the token JwtSecurityTokenHandler.DefaultMapInboundClaims = false; // Sign-in users with the Microsoft identity platform builder.Services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme) .AddMicrosoftIdentityWebApp(builder.Configuration) .EnableTokenAcquisitionToCallDownstreamApi() .AddInMemoryTokenCaches(); builder.Services.AddControllersWithViews(options => { var policy = new AuthorizationPolicyBuilder() .RequireAuthenticatedUser() .Build(); options.Filters.Add(new AuthorizeFilter(policy)); }).AddMicrosoftIdentityUI(); var app = builder.Build(); // Configure the HTTP request pipeline. if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Home/Error"); // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthorization(); app.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); app.Run();