Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy: Dzierżawcy zasobów ludzkich
Zewnętrzni dzierżawcy (dowiedzieć się więcej)
W tym samouczku dodasz elementy uwierzytelniania i autoryzacji do aplikacji internetowej ASP.NET Core. W poprzednim samouczku utworzono projekt ASP.NET Core i skonfigurowano go do uwierzytelniania.
W tym samouczku nauczysz się następujących rzeczy:
- Dodawanie elementów autoryzacji i uwierzytelniania do kodu
- Włącz wyświetlanie oświadczeń w tokenie identyfikatora
- Dodaj doświadczenia logowania i wylogowywania
Warunki wstępne
- Ukończenie wymagań wstępnych i kroków opisanych w Samouczek: konfigurowanie aplikacji internetowej ASP.NET Core, która uwierzytelnia użytkowników.
Dodawanie elementów uwierzytelniania i autoryzacji
Aby dodać elementy uwierzytelniania i autoryzacji do aplikacji internetowej ASP.NET Core, należy zmodyfikować pliki HomeController.cs i Program.cs. Obejmuje to zarządzanie stroną główną, dodawanie poprawnych przestrzeni nazw i konfigurowanie logowania.
Dodawanie autoryzacji do HomeController.cs
Strona główna aplikacji musi mieć możliwość autoryzowania użytkownika. Przestrzeń nazw Microsoft.AspNetCore.Authorization
udostępnia klasy i interfejsy do implementowania autoryzacji w aplikacji internetowej. Atrybut [Authorize]
służy do określania, że tylko uwierzytelnieni użytkownicy mogą używać aplikacji internetowej.
W aplikacji internetowej otwórz Controllers/HomeController.csi dodaj następujący fragment kodu w górnej części pliku:
using System.Diagnostics; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using dotnetcore_webapp.Models;
Dodaj atrybut
[Authorize]
powyżej definicji klasyHomeController
, jak pokazano w poniższym fragmencie kodu:[Authorize] public class HomeController : Controller { ...
Dodawanie elementów uwierzytelniania i autoryzacji do Program.cs
Plik Program.cs jest punktem wejścia aplikacji i musi zostać zmodyfikowany w celu dodania uwierzytelniania i autoryzacji do aplikacji internetowej. Usługi należy dodać, aby umożliwić aplikacji używanie ustawień zdefiniowanych w appsettings.json na potrzeby uwierzytelniania.
Dodaj następujące przestrzenie nazw 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ługę uwierzytelniania aplikacji internetowej Microsoft Identity, która konfiguruje aplikację tak, aby korzystała z tożsamości microsoft na potrzeby uwierzytelniania.
// 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. // 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();
Następnie należy skonfigurować oprogramowanie pośredniczące w celu włączenia możliwości uwierzytelniania. Zastąp pozostałą część kodu poniższym fragmentem kodu.
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();
Dodaj logowanie i wylogowywanie doświadczenia użytkownika
Interfejs użytkownika musi zostać zaktualizowany, aby zapewnić bardziej przyjazne dla użytkownika doświadczenie podczas logowania i wylogowania. W tej sekcji pokazano, jak utworzyć nowy plik, który wyświetla elementy nawigacyjne na podstawie stanu uwierzytelnienia użytkownika. Kod odczytuje żądania tokenu identyfikatora, aby sprawdzić, czy użytkownik jest uwierzytelniony i używa User.Claims
do ekstrakcji żądań tokenu identyfikatora.
Utwórz nowy plik w Views/Shared i nadaj mu nazwę _LoginPartial.cshtml.
Otwórz plik i dodaj następujący kod, aby dodać funkcje logowania i wylogowania.
@using System.Security.Principal <ul class="navbar-nav"> @if (User.Identity is not null && User.Identity.IsAuthenticated) { <li class="nav-item"> <span class="nav-link text-dark">Hello @User.Claims.First(c => c.Type == "preferred_username").Value!</span> </li> <li class="nav-item"> <a class="nav-link text-dark" asp-area="MicrosoftIdentity" asp-controller="Account" asp-action="SignOut">Sign out</a> </li> } else { <li class="nav-item"> <a class="nav-link text-dark" asp-area="MicrosoftIdentity" asp-controller="Account" asp-action="SignIn">Sign in</a> </li> } </ul>
Otwórz Views/Shared/_Layout.cshtml i dodaj odwołanie do
_LoginPartial
utworzonego w poprzednim kroku. Umieść to w pobliżu końca klasynavbar-nav
, jak pokazano w poniższym fragmencie kodu:<div class="navbar-collapse collapse d-sm-inline-flex justify-content-between"> <ul class="navbar-nav flex-grow-1"> <li class="nav-item"> <a class="nav-link text-dark" asp-area="" asp-page="/Index">Home</a> </li> <li class="nav-item"> <a class="nav-link text-dark" asp-area="" asp-page="/Privacy">Privacy</a> </li> </ul> <partial name="_LoginPartial" /> </div>
Użyj niestandardowej domeny adresu URL (opcjonalnie)
Dotyczy: Najemcy Workforce
Zewnętrzni najemcy (dowiedz się więcej)
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 nazwy domeny ciamlogin.com.
Wykonaj następujące kroki, aby użyć domeny niestandardowej:
Wykonaj kroki opisane w "Włączanie niestandardowych domen adresów URL dla aplikacji w dzierżawach zewnętrznych", w celu włączenia niestandardowej domeny adresu URL dla swojej dzierżawy zewnętrznej.
Otwórz plik appsettings.json:
- Zaktualizuj parametry
Instance
iTenantId
do właściwościAuthority
. - Dodaj następujący ciąg do wartości
Authority
orazhttps://Enter_the_Custom_Domain_Here/Enter_the_Tenant_ID_Here
. ZastąpEnter_the_Custom_Domain_Here
domeną niestandardowego adresu URL iEnter_the_Tenant_ID_Here
identyfikatorem najemcy. Jeśli nie masz identyfikatora najemcy, dowiedz się, jak możesz sprawdzić szczegóły najemcy . - Dodaj właściwość
knownAuthorities
z wartością [Enter_the_Custom_Domain_Here].
- Zaktualizuj parametry
Po wprowadzeniu zmian w pliku appsettings.json, jeśli niestandardowa domena URL to login.contoso.com, a identyfikator najemcy to aaaabbbb-0000-cccc-1111-dddd2222eeee, 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",
"ClientCertificates": [
{
"SourceType": "StoreWithThumbprint",
"CertificateStorePath": "CurrentUser/My",
"CertificateThumbprint": "AA11BB22CC33DD44EE55FF66AA77BB88CC99DD00"
}
],
"CallbackPath": "/signin-oidc",
"SignedOutCallbackPath": "/signout-callback-oidc",
"KnownAuthorities": ["login.contoso.com"]
...