Öğretici: Dış kiracıda kimlik doğrulaması için ASP.NET Core web uygulaması hazırlama
Bu öğretici, ASP.NET Core web uygulaması oluşturmayı ve Microsoft Entra yönetim merkezini kullanarak kimlik doğrulamasına hazırlamayı gösteren serinin 2. bölümüdür. Bu serinin 1. Bölümünde, bir uygulamayı kaydettiniz ve dış kiracınızda kullanıcı akışlarını yapılandırdınız. Bu öğreticide, ASP.NET Core web uygulamasının nasıl oluşturulacağı ve kimlik doğrulaması için nasıl yapılandıracağınız gösterilmektedir.
Bu öğreticide;
- Visual Studio Code'da ASP.NET Core projesi oluşturma
- Gerekli NuGet paketlerini ekleme
- Uygulama ayarlarını yapılandırma
- Kimlik doğrulamasını uygulamak için kod ekleme
Önkoşullar
- Öğretici: ASP.NET Core web uygulaması oluşturmak için dış kiracınızı hazırlama.
- ASP.NET Core uygulamalarını destekleyen tüm tümleşik geliştirme ortamları (IDE) kullanılabilse de, bu öğreticide Visual Studio Code kullanılmaktadır. Buradan indirebilirsiniz.
- .NET 7.0 SDK.
ASP.NET Core projesi oluşturma
Visual Studio Code'ı açın, Dosya>Klasör Aç... öğesini seçin. Adresine gidin ve projenizin oluşturulacağı konumu seçin.
Terminal>Yeni Terminal'i seçerek yeni bir terminal açın.
Model Görünüm Denetleyicisi (MVC) ASP.NET Core projesi yapmak için aşağıdaki komutu girin.
dotnet new mvc -n dotnetcore_webapp
Kimlik paketlerini yükleme
Kullanıcıların kimliğini doğrulamak için projeye kimlikle ilgili NuGet paketleri yüklenmelidir.
dotnetcore_webapp klasörüne geçmek ve ilgili NuGet paketini yüklemek için aşağıdaki komutları girin:
cd dotnetcore_webapp dotnet add package Microsoft.Identity.Web.UI
Uygulamayı kimlik doğrulaması için yapılandırma
appsettings.json dosyasını açın ve var olan kodu aşağıdaki kod parçacığıyla değiştirin.
{ "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
- Uygulama için kimlik sağlayıcısı örneği ve oturum açma hedef kitlesi. değerini dış kiracınızın alt etki alanıyla değiştirinEnter_the_Tenant_Subdomain_Here
. Bunu bulmak için kenar çubuğu menüsünde Genel Bakış'ı seçin ve genel bakış sekmesine geçin. Birincil etki alanını caseyjensen.onmicrosoft.com biçiminde bulun. Alt etki alanı caseyjensen şeklindedir.ClientId
- İstemci olarak da adlandırılan uygulamanın tanımlayıcısı. Tırnak içindeki metni, kayıtlı uygulamanın genel bakış sayfasından daha önce kaydedilen Uygulama (istemci) Kimliği değeriyle değiştirin.ClientSecret
- Kiracınızı hazırlama bölümünde oluşturduğunuz istemci gizli dizisinin değeri. Tırnak içindeki metni Microsoft Entra yönetim merkezindeki gizli dizi değeriyle değiştirin.CallbackPath
- Sunucunun yanıtı uygun uygulamaya yönlendirmesine yardımcı olan bir tanımlayıcıdır.
Dosyadaki değişiklikleri kaydedin.
Özellikler/launchSettings.json dosyasını açın.
https
bölümündeprofiles
, url'siniapplicationUrl
https
okuyacakhttps://localhost:7274
şekilde değiştirin. Bu URL'yi Yeniden Yönlendirme URI'sini tanımlamak için kullandınız.Değişiklikleri dosyanıza kaydedin.
Özel URL etki alanı kullanma (İsteğe bağlı)
Kimlik doğrulama URL'sini tam olarak markalandıracak özel bir etki alanı kullanın. Kullanıcı açısından bakıldığında, kullanıcılar ciamlogin.com etki alanı adına yeniden yönlendirilmek yerine kimlik doğrulama işlemi sırasında etki alanınızda kalır.
Özel etki alanı kullanmak için şu adımları izleyin:
Dış kiracınızda özel URL etki alanını etkinleştirmek için Dış kiracılardaki uygulamalar için özel URL etki alanlarını etkinleştirme başlığındaki adımları kullanın.
appsettings.json dosyasını açın:
- özelliğinin
Authority
değerini olarak https://Enter_the_Custom_Domain_Here/Enter_the_Tenant_ID_Heregüncelleştirin. değerini özel URL etki alanınızla veEnter_the_Tenant_ID_Here
kiracı kimliğiniz ile değiştirinEnter_the_Custom_Domain_Here
. Kiracı kimliğiniz yoksa kiracı ayrıntılarınızı nasıl okuyacağınızı öğrenin. - [Enter_the_Custom_Domain_Here] değerine sahip özellik ekleyin
knownAuthorities
.
- özelliğinin
appsettings.json dosyanızda değişiklik yaptıktan sonra, özel URL etki alanınız login.contoso.com ve kiracı kimliğiniz aaaabbbb-0000-cccc-1111-dddd2222eeeee ise, dosyanız aşağıdaki kod parçacığına benzer görünmelidir:
{
"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": "*"
}
HomeController.cs yetkilendirme ekleme
HomeController.cs dosyası, uygulamanın giriş sayfasının kodunu içerir ve kullanıcıyı yetkilendirme özelliğine sahip olması gerekir. Ad Microsoft.AspNetCore.Authorization
alanı, web uygulamasına yetkilendirme uygulamak için sınıfları ve arabirimleri sağlar ve [Authorize]
özniteliği yalnızca kimliği doğrulanmış kullanıcıların web uygulamasını kullanabileceğini belirtmek için kullanılır.
Kod düzenleyicinizde Controllers\HomeController.cs dosyasını açın.
Yetkilendirmenin denetleyiciye eklenmesi gerekir; dosyanın üst kısmı aşağıdaki kod parçacığıyla aynı olacak şekilde ekleyin
Microsoft.AspNetCore.Authorization
:using System.Diagnostics; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using dotnetcore_webapp.Models;
Ayrıca özniteliğini
[Authorize]
doğrudan sınıf tanımınınHomeController
üzerine ekleyin.[Authorize]
Program.cs kimlik doğrulaması ve yetkilendirme ekleme
web uygulamasına kimlik doğrulaması ve yetkilendirme eklemek için Program.cs değiştirilmesi gerekir. Bu, kimlik doğrulaması ve yetkilendirme için ad alanları eklemeyi ve kullanıcılara Microsoft kimlik platformu ile oturum açabilmeyi içerir.
Gerekli ad alanlarını eklemek için Program.cs açın ve dosyanın en üstüne aşağıdaki kod parçacığını ekleyin:
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;
Ardından, web uygulamasının kullanıcıları Microsoft kimlik platformu ile oturum açmasını sağlayacak kimlik doğrulama hizmetlerini uygulamaya ekleyin. Program.cs kodun geri kalanını aşağıdaki kod parçacığıyla değiştirebilirsiniz:
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();