Kurz: Konfigurace webové aplikace ASP.NET Core pro autorizaci a ověřování
Platí pro: Tenanti pracovních sil – externí tenanti
(další informace)
V tomto kurzu přidáte ověřovací a autorizační prvky do webové aplikace ASP.NET Core. V předchozím kurzujste vytvořili projekt ASP.NET Core a nakonfigurovali ho pro ověřování.
V tomto kurzu:
- Přidání autorizačních a ověřovacích prvků do kódu
- Povolení zobrazení deklarací identity v tokenu ID
- Přidání zkušeností s přihlášením a odhlášením
Požadavky
- Dokončení požadavků a kroků v kurzu : Nastavení webové aplikace ASP.NET Core, která ověřuje uživatele.
Přidání ověřovacích a autorizačních prvků
Soubory HomeController.cs a Program.cs je potřeba upravit, aby se do webové aplikace ASP.NET Core přidaly ověřovací a autorizační prvky. To zahrnuje správu domovské stránky, přidání správných oborů názvů a konfiguraci přihlášení.
Přidání autorizace do HomeController.cs
Domovská stránka aplikace musí mít možnost autorizovat uživatele. Obor názvů Microsoft.AspNetCore.Authorization
poskytuje třídy a rozhraní pro implementaci autorizace pro webovou aplikaci. Atribut [Authorize]
slouží k určení, že webovou aplikaci můžou používat jenom ověření uživatelé.
Ve webové aplikaci otevřete Controllers/HomeController.csa do horní části souboru přidejte následující fragment kódu:
using System.Diagnostics; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using dotnetcore_webapp.Models;
Přidejte atribut
[Authorize]
nad definici třídyHomeController
, jak je znázorněno v následujícím fragmentu kódu:[Authorize] public class HomeController : Controller { ...
Přidání ověřovacích a autorizačních prvků do Program.cs
Soubor Program.cs je vstupním bodem aplikace a je potřeba ho upravit, aby se do webové aplikace přidalo ověřování a autorizace. Služby je potřeba přidat, aby aplikace mohla používat nastavení definovaná v appsettings.json pro ověřování.
Na začátek souboru přidejte následující obory názvů.
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;
Dále přidejte ověřovací službu webové aplikace Microsoft Identity, která aplikaci nakonfiguruje tak, aby k ověřování používala identitu Microsoftu.
// 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();
Dále je potřeba nakonfigurovat middleware tak, aby povoloval možnosti ověřování. Zbytek kódu nahraďte následujícím fragmentem kódu.
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();
Přidejte zážitek z přihlašování a odhlašování
Uživatelské rozhraní musí být aktualizováno, aby poskytovalo uživatelsky přívětivější prostředí pro přihlášení a odhlášení. Tato část ukazuje, jak vytvořit nový soubor, který zobrazuje navigační položky na základě stavu ověřování uživatele. Kód načte deklarace identity tokenu ID a zkontroluje, jestli je uživatel ověřený a používá User.Claims
k extrakci deklarací identity tokenu ID.
V zobrazeních nebo sdíleném vytvořte nový soubor a pojmenujte ho _LoginPartial.cshtml.
Otevřete soubor a přidejte následující kód pro přidání přihlášení a odhlášení:
@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>
Otevřete Views/Shared/_Layout.cshtml a přidejte odkaz na
_LoginPartial
vytvořený v předchozím kroku. Umístěte ho na konec třídynavbar-nav
, jak je znázorněno v následujícím fragmentu kódu:<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>
Použití vlastní domény URL (volitelné)
platí pro: pracovní nájemníci
externí nájemníci (další informace)
Pomocí vlastní domény plně označte adresu URL ověřování. Z pohledu uživatele zůstanou uživatelé ve vaší doméně během procesu ověřování místo přesměrování na název domény ciamlogin.com.
Pokud chcete použít vlastní doménu, postupujte takto:
Použijte kroky v Povolení vlastních domén URL pro aplikace v externích tenantech k povolení vlastní domény URL pro váš externí tenant.
Otevřete soubor appsettings.json:
- Aktualizujte parametry
Instance
aTenantId
na vlastnostAuthority
. - Přidejte následující řetězec k hodnotě
Authority
nahttps://Enter_the_Custom_Domain_Here/Enter_the_Tenant_ID_Here
. NahraďteEnter_the_Custom_Domain_Here
vlastní doménou URL aEnter_the_Tenant_ID_Here
ID tenanta. Pokud nemáte ID tenanta, zjistěte, jak získat podrobnosti o tenantovi. - Přidejte vlastnost
knownAuthorities
s hodnotou [Enter_the_Custom_Domain_Here].
- Aktualizujte parametry
Po provedení změn v souboru appsettings.json, pokud je vaše vlastní doména URL login.contoso.coma ID vašeho tenanta je aaaabbbb-0000-cccc-1111-dddd2222eeeeee, měl by váš soubor vypadat podobně jako následující fragment kódu:
{
"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"]
...