Zelfstudie: Een ASP.NET Core-web-app configureren voor autorisatie en verificatie
Van toepassing op:Werknemer-tenants
Externe tenants (meer informatie)
In deze zelfstudie voegt u de verificatie- en autorisatie-elementen toe aan een ASP.NET Core-web-app. In de vorige zelfstudiehebt u een ASP.NET Core-project gemaakt en geconfigureerd voor verificatie.
In deze handleiding:
- Autorisatie- en verificatie-elementen toevoegen aan de code
- Het inschakelen van de weergave van claims in een ID-token
- De ervaringen voor aanmelden en afmelden toevoegen
Voorwaarden
- Voltooiing van de vereisten en stappen in Zelfstudie: Een ASP.NET Core-web-app instellen waarmee gebruikersworden geverifieerd.
Verificatie- en autorisatie-elementen toevoegen
De HomeController.cs- en Program.cs-bestanden moeten worden gewijzigd om de verificatie- en autorisatie-elementen toe te voegen aan de ASP.NET Core-web-app. Dit omvat het beheren van de startpagina, het toevoegen van de juiste naamruimten en het configureren van aanmelding.
Autorisatie toevoegen aan HomeController.cs
De startpagina van de toepassing moet de mogelijkheid hebben om de gebruiker te autoriseren. De Microsoft.AspNetCore.Authorization
-naamruimte biedt de klassen en interfaces voor het implementeren van autorisatie voor de web-app. Het kenmerk [Authorize]
wordt gebruikt om op te geven dat alleen geverifieerde gebruikers de web-app kunnen gebruiken.
Open in uw web-app Controllers/HomeController.csen voeg het volgende codefragment toe aan de bovenkant van het bestand:
using System.Diagnostics; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using dotnetcore_webapp.Models;
Voeg het kenmerk
[Authorize]
toe boven deHomeController
klassedefinitie, zoals wordt weergegeven in het volgende fragment:[Authorize] public class HomeController : Controller { ...
Verificatie- en autorisatie-elementen toevoegen aan Program.cs
Het Program.cs
-bestand is het toegangspunt van de toepassing en moet worden gewijzigd om verificatie en autorisatie toe te voegen aan de web-app. Services moeten worden toegevoegd zodat de app de instellingen kan gebruiken die zijn gedefinieerd in appsettings.json voor verificatie.
Voeg de volgende naamruimten toe aan het begin van het bestand.
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;
Voeg vervolgens de verificatieservice microsoft Identity Web-app toe, waarmee de app wordt geconfigureerd voor het gebruik van Microsoft Identity voor verificatie.
// 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();
Vervolgens moet de middleware worden geconfigureerd om de verificatiemogelijkheden in te schakelen. Vervang de rest van de code door het volgende codefragment.
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();
De aanmeldings- en afmeldingservaring toevoegen
De gebruikersinterface moet worden bijgewerkt om een gebruiksvriendelijkere ervaring te bieden voor aanmelden en afmelden. In deze sectie wordt beschreven hoe u een nieuw bestand maakt waarin navigatie-items worden weergegeven op basis van de verificatiestatus van de gebruiker. De code leest de id-tokenclaims om te controleren of de gebruiker is geverifieerd en gebruikt User.Claims
om id-tokenclaims te extraheren.
Maak een nieuw bestand in Pages/Shared en geef het de naam _LoginPartial.cshtml.
Open het bestand en voeg de volgende code toe voor het toevoegen van de aanmeldings- en afmeldingservaring:
@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>
Open Pages/Shared/_Layout.cshtml en voeg een verwijzing toe naar
_LoginPartial
die u in de vorige stap hebt gemaakt. Plaats deze aan het einde van denavbar-nav
-klasse, zoals wordt weergegeven in het volgende fragment:<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>
Aangepast URL-domein gebruiken (optioneel)
Van toepassing op: Medewerkershuurders
Externe huurders (meer informatie)
Gebruik een aangepast domein om de verificatie-URL volledig te merken. Vanuit gebruikersperspectief blijven gebruikers in uw domein tijdens het verificatieproces in plaats van omgeleid naar de ciamlogin.com domeinnaam.
Volg deze stappen om een aangepast domein te gebruiken:
Gebruik de stappen in Aangepaste URL-domeinen inschakelen voor apps in externe tenants om aangepast URL-domein in te schakelen voor uw externe tenant.
Openen appsettings.json bestand:
- Werk de parameters
Instance
enTenantId
bij naar een eigenschapAuthority
. - Voeg de volgende tekenreeks toe aan de
Authority
-waarde bijhttps://Enter_the_Custom_Domain_Here/Enter_the_Tenant_ID_Here
. VervangEnter_the_Custom_Domain_Here
door uw aangepaste URL-domein enEnter_the_Tenant_ID_Here
door uw tenant-id. Als u uw tenant-id niet hebt, leer hoe je je tenantgegevens kunt lezen. - Voeg een eigenschap
knownAuthorities
toe met een waarde [Enter_the_Custom_Domain_Here].
- Werk de parameters
Nadat u de wijzigingen in het appsettings.json-bestand hebt aangebracht, als uw aangepaste URL-domein is login.contoso.comen uw tenant-id is aaaabbbb-0000-cccc-1111-ddd2222eeeee-, moet uw bestand er ongeveer uitzien als het volgende fragment:
{
"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"]
...