Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu kılavuz, .NET Framework, .NET Standard 2.0 ve klasik .NET uygulamalarında (.NET 4.7.2+) MSAL.NET ile Microsoft.Identity.Web belirteç önbelleği ve sertifika paketlerinin nasıl kullanılacağını göstermektedir.
Genel bakışı anlama
Microsoft.Identity.Web 1.17+'dan itibaren, Microsoft.Identity.Web yardımcı paketlerini ASP.NET Core olmayan ortamlarda MSAL.NET ile kullanabilirsiniz.
Paket avantajlarını belirleme
| Özellik | Fayda |
|---|---|
| Belirteç Önbelleği Serileştirme | Bellek içi, SQL Server, Redis, Cosmos DB, PostgreSQL için yeniden kullanılabilir önbellek bağdaştırıcıları |
| Sertifika Yardımcıları | KeyVault, dosya sistemi veya sertifika depolarından basitleştirilmiş sertifika yükleme |
| Talep Uzantıları |
ClaimsPrincipal manipülasyonu için yardımcı yöntemler |
| .NET Standart 2.0 | .NET Framework 4.7.2+, .NET Core ve .NET 5+ ile uyumludur |
| En Düşük Bağımlılıklar | ASP.NET Core bağımlılıkları olmayan hedeflenen paketler |
Desteklenen senaryoları gözden geçirme
Aşağıdaki senaryolar hedeflenen yardımcı program paketleriyle desteklenir.
- .NET Framework Konsol Uygulamaları (daemon senaryoları)
- Desktop Applications (.NET Framework)
- Worker Services (.NET Framework)
- .NET Standard 2.0 Kitaplıkları (platformlar arası uyumluluk)
- Non-web MSAL.NET uygulamaları
Uyarı
ASP.NET MVC/Web API uygulamaları için bkz. OWIN Integration.
Paketleri seçme
Senaryonuzla eşleşen paketi seçin.
MSAL.NET için temel paketleri tanımlama
| Package | Amaç | Bağımlılıklar | .NET Hedefi |
|---|---|---|---|
| Microsoft. Identity.Web.TokenCache | Token önbelleği serileştiricileri, ClaimsPrincipal uzantılar |
Minimal | .NET Standart 2.0 |
| Microsoft. Identity.Web.Certificate | Sertifika yükleme yardımcı programları | Minimal | .NET Standart 2.0 |
Paketleri yükleme
Paketleri projenize eklemek için aşağıdaki yöntemlerden birini kullanın.
Paket Yöneticisi Console:
# Token cache serialization
Install-Package Microsoft.Identity.Web.TokenCache
# Certificate management
Install-Package Microsoft.Identity.Web.Certificate
.NET CLI:
dotnet add package Microsoft.Identity.Web.TokenCache
dotnet add package Microsoft.Identity.Web.Certificate
Temel paket sınırlamalarını anlama
Çekirdek Microsoft.Identity.Web paketi, ASP.NET Core bağımlılıkları (Microsoft.AspNetCore.*) içerir:
- ASP.NET Framework ile uyumsuz
- Paket boyutunu gereksiz yere artırma
- Bağımlılık çakışmaları oluşturma
.NET Framework ve .NET Standart senaryoları için hedeflenen paketleri kullanın.
Belirteç önbelleği serileştirmeyi yapılandırma
Token önbellek bağdaştırıcılarını anlamak
Microsoft. Identity.Web, MSAL.NET IConfidentialClientApplication ile sorunsuz çalışan belirteç önbellek bağdaştırıcıları sağlar.
Belirteç önbelleği ile gizli istemci oluşturma
Aşağıdaki örnek gizli bir istemci uygulaması oluşturur ve bellek içi belirteç önbelleği ekler.
using Microsoft.Identity.Client;
using Microsoft.Identity.Web;
using Microsoft.Identity.Web.TokenCacheProviders;
public class MsalAppBuilder
{
private static IConfidentialClientApplication _app;
public static IConfidentialClientApplication BuildConfidentialClientApplication()
{
if (_app == null)
{
string clientId = ConfigurationManager.AppSettings["AzureAd:ClientId"];
string clientSecret = ConfigurationManager.AppSettings["AzureAd:ClientSecret"];
string tenantId = ConfigurationManager.AppSettings["AzureAd:TenantId"];
// Create the confidential client application
_app = ConfidentialClientApplicationBuilder.Create(clientId)
.WithClientSecret(clientSecret)
.WithTenantId(tenantId)
.WithAuthority(AzureCloudInstance.AzurePublic, tenantId)
.Build();
// Add token cache serialization (choose one option below)
_app.AddInMemoryTokenCache();
}
return _app;
}
}
Belirteç önbelleği seçeneklerini belirleme
Dağıtım senaryonuza en uygun önbellek sağlayıcısını seçin.
Bellek içi belirteç önbelleğini yapılandırma
Aşağıdaki örnek basit bir bellek içi önbellek ekler:
using Microsoft.Identity.Web.TokenCacheProviders;
_app.AddInMemoryTokenCache();
Bellekteki boyut sınırlarına sahip önbellek (Microsoft.Identity.Web 1.20+):
using Microsoft.Extensions.Caching.Memory;
_app.AddInMemoryTokenCache(services =>
{
// Configure memory cache options
services.Configure<MemoryCacheOptions>(options =>
{
options.SizeLimit = 5000000; // 5 MB limit
});
});
Özellikler:
- Hızlı erişim
- Dış bağımlılık yok
- İşlemler arasında paylaşılmaz
- Uygulama yeniden başlatmada kayboldu
Kullanım örneği: Tek örnekli konsol uygulamaları, masaüstü uygulamaları
Dağıtılmış bellek içi belirteç önbelleğini yapılandırma
Çok örnekli ortamlar için dağıtılmış bir bellek içi önbellek eklemek için aşağıdaki kodu kullanın:
_app.AddDistributedTokenCaches(services =>
{
// Requires: Microsoft.Extensions.Caching.Memory (NuGet)
services.AddDistributedMemoryCache();
});
Özellikler:
- Uygulama örnekleri arasında paylaşılan
- Yük dengeli senaryolar için daha iyi
- Ek NuGet paketi gerektirir
- Uygulama yeniden başlatmada hala kayıp
Kullanım örneği: Belirteç yeniden alımı kabul edilebilir olan çok örnekli hizmetler
SQL Server belirteci önbelleğini yapılandırma
Kalıcı, dağıtılmış bir SQL Server önbelleği eklemek için aşağıdaki kodu kullanın:
using Microsoft.Extensions.Caching.SqlServer;
_app.AddDistributedTokenCaches(services =>
{
// Requires: Microsoft.Extensions.Caching.SqlServer (NuGet)
services.AddDistributedSqlServerCache(options =>
{
options.ConnectionString = ConfigurationManager.ConnectionStrings["TokenCache"].ConnectionString;
options.SchemaName = "dbo";
options.TableName = "TokenCache";
// IMPORTANT: Set expiration above token lifetime
// Access tokens typically expire after 1 hour
options.DefaultSlidingExpiration = TimeSpan.FromMinutes(90);
});
});
Gerekli önbellek tablosunu oluşturmak için aşağıdaki SQL'i çalıştırın:
-- Create the cache table
CREATE TABLE [dbo].[TokenCache] (
[Id] NVARCHAR(449) NOT NULL,
[Value] VARBINARY(MAX) NOT NULL,
[ExpiresAtTime] DATETIMEOFFSET NOT NULL,
[SlidingExpirationInSeconds] BIGINT NULL,
[AbsoluteExpiration] DATETIMEOFFSET NULL,
PRIMARY KEY ([Id])
);
-- Create index for performance
CREATE INDEX [Index_ExpiresAtTime] ON [dbo].[TokenCache] ([ExpiresAtTime]);
Özellikler:
- Yeniden başlatmalar sonrasında kalıcı
- Birden çok örnek arasında paylaşıldı
- Güvenilir ve ölçeklenebilir
- SQL Server kurulumu gerektirir
Kullanım örneği: Üretim daemon hizmetleri, zamanlanmış görevler, çok örnekli çalışanlar
Redis belirteci önbelleğini yapılandırma
Yüksek performanslı redis dağıtılmış önbelleği eklemek için aşağıdaki kodu kullanın:
using StackExchange.Redis;
using Microsoft.Extensions.Caching.StackExchangeRedis;
_app.AddDistributedTokenCaches(services =>
{
// Requires: Microsoft.Extensions.Caching.StackExchangeRedis (NuGet)
services.AddStackExchangeRedisCache(options =>
{
options.Configuration = ConfigurationManager.AppSettings["Redis:ConnectionString"];
options.InstanceName = "TokenCache_";
});
});
Aşağıdaki örnekte üretime hazır bir Redis yapılandırması gösterilmektedir:
services.AddStackExchangeRedisCache(options =>
{
options.Configuration = ConfigurationManager.AppSettings["Redis:ConnectionString"];
options.InstanceName = "MyDaemonApp_";
// Optional: Configure Redis options
options.ConfigurationOptions = new ConfigurationOptions
{
AbortOnConnectFail = false,
ConnectTimeout = 5000,
SyncTimeout = 5000
};
});
Özellikler:
- Son derece hızlı
- Örnekler arasında paylaşılan
- Kalıcı (Redis kalıcılığı etkinken)
- Redis sunucusu gerektirir
Kullanım örneği: Yüksek hacimli daemon uygulamaları, dağıtılmış sistemler, mikro hizmetler
Cosmos DB belirteç önbelleğini yapılandırma
Genel olarak dağıtılmış bir Cosmos DB önbelleği eklemek için aşağıdaki kodu kullanın:
using Microsoft.Extensions.Caching.Cosmos;
_app.AddDistributedTokenCaches(services =>
{
// Requires: Microsoft.Extensions.Caching.Cosmos (preview)
services.AddCosmosCache(options =>
{
options.ContainerName = "TokenCache";
options.DatabaseName = "IdentityCache";
options.ClientBuilder = new CosmosClientBuilder(
ConfigurationManager.AppSettings["CosmosConnectionString"]);
options.CreateIfNotExists = true;
});
});
Özellikler:
- Genel olarak dağıtılmış
- Yüksek oranda kullanılabilir
- Otomatik ölçeklendirme
- Redis'ten daha yüksek gecikme süresi
- Daha yüksek maliyet
Kullanım örneği: Küresel daemon hizmetleri, coğrafi olarak dağıtılmış uygulamalar
PostgreSQL belirteç önbelleğini yapılandırma
Dağıtılmış postgreSQL önbelleği eklemek için aşağıdaki kodu kullanın:
_app.AddDistributedTokenCaches(services =>
{
// Requires: Microsoft.Extensions.Caching.Postgres (NuGet)
services.AddDistributedPostgresCache(options =>
{
options.ConnectionString = ConfigurationManager.ConnectionStrings["PostgresCache"].ConnectionString;
options.SchemaName = ConfigurationManager.AppSettings["PostgresCache:SchemaName"];
options.TableName = ConfigurationManager.AppSettings["PostgresCache:TableName"];
options.CreateIfNotExists = bool.Parse(
ConfigurationManager.AppSettings["PostgresCache:CreateIfNotExists"] ?? "true");
// Set expiration above token lifetime.
// Access tokens typically expire after 1 hour.
options.DefaultSlidingExpiration = TimeSpan.FromMinutes(90);
});
});
Özellikler:
- Yeniden başlatmalar sonrasında kalıcı
- Birden çok örnek arasında paylaşıldı
- Tanıdık SQL semantiği
- PostgreSQL için Azure Veri Tabanı ile çalışır
- PostgreSQL sunucusu gerektirir
Kullanım durumu: Birincil veritabanı olarak zaten PostgreSQL kullanan uygulamalar veya PostgreSQL için Azure Veri Tabanı kullanan Azure barındırma hizmetleri
Eksiksiz bir daemon uygulaması oluşturma
Aşağıdaki örnekte, istemci kimlik bilgilerini ve SQL Server belirteç önbelleğini kullanarak belirteçleri alan tam bir daemon uygulaması gösterilmektedir.
using Microsoft.Identity.Client;
using Microsoft.Identity.Web;
using Microsoft.Identity.Web.TokenCacheProviders;
using System;
using System.Threading.Tasks;
namespace DaemonApp
{
class Program
{
private static IConfidentialClientApplication _app;
static async Task Main(string[] args)
{
// Build confidential client with token cache
_app = BuildConfidentialClient();
// Acquire token for app-only access
string[] scopes = new[] { "https://graph.microsoft.com/.default" };
try
{
var result = await _app.AcquireTokenForClient(scopes)
.ExecuteAsync();
Console.WriteLine($"Token acquired successfully!");
Console.WriteLine($"Token source: {result.AuthenticationResultMetadata.TokenSource}");
Console.WriteLine($"Expires on: {result.ExpiresOn}");
// Use token to call API
await CallProtectedApi(result.AccessToken);
}
catch (MsalServiceException ex)
{
Console.WriteLine($"Error acquiring token: {ex.ErrorCode}");
Console.WriteLine($"CorrelationId: {ex.CorrelationId}");
}
}
private static IConfidentialClientApplication BuildConfidentialClient()
{
var app = ConfidentialClientApplicationBuilder
.Create(ConfigurationManager.AppSettings["ClientId"])
.WithClientSecret(ConfigurationManager.AppSettings["ClientSecret"])
.WithTenantId(ConfigurationManager.AppSettings["TenantId"])
.Build();
// Add SQL Server token cache for persistence
app.AddDistributedTokenCaches(services =>
{
services.AddDistributedSqlServerCache(options =>
{
options.ConnectionString = ConfigurationManager
.ConnectionStrings["TokenCache"].ConnectionString;
options.SchemaName = "dbo";
options.TableName = "TokenCache";
options.DefaultSlidingExpiration = TimeSpan.FromMinutes(90);
});
});
return app;
}
private static async Task CallProtectedApi(string accessToken)
{
// Your API call logic
}
}
}
Sertifikaları yönetme
Sertifika yüklemeyi anlama
Microsoft. Identity.Web, istemci kimlik bilgisi akışları için çeşitli kaynaklardan sertifika yüklemeyi basitleştirir.
DefaultCertificateLoader ile sertifikaları yükleme
Aşağıdaki örnekte, Azure Key Vault'dan sertifika yükleme ve gizli istemci uygulaması oluşturma işlemleri gösterilmektedir.
using Microsoft.Identity.Web;
using Microsoft.Identity.Client;
public class CertificateHelper
{
public static IConfidentialClientApplication CreateAppWithCertificate()
{
string clientId = ConfigurationManager.AppSettings["AzureAd:ClientId"];
string tenantId = ConfigurationManager.AppSettings["AzureAd:TenantId"];
// Define certificate source
var certDescription = CertificateDescription.FromKeyVault(
keyVaultUrl: "https://my-keyvault.vault.azure.net",
keyVaultCertificateName: "MyCertificate"
);
// Load certificate
ICertificateLoader certificateLoader = new DefaultCertificateLoader();
certificateLoader.LoadIfNeeded(certDescription);
// Create confidential client with certificate
var app = ConfidentialClientApplicationBuilder.Create(clientId)
.WithCertificate(certDescription.Certificate)
.WithTenantId(tenantId)
.Build();
// Add token cache
app.AddInMemoryTokenCache();
return app;
}
}
Sertifika kaynaklarını seçme
Azure Key Vault'dan yükleme
Kasa URL'sini ve sertifika adını belirterek Azure Key Vault'de depolanan bir sertifikayı yükleyin.
var certDescription = CertificateDescription.FromKeyVault(
keyVaultUrl: "https://my-keyvault.vault.azure.net",
keyVaultCertificateName: "MyApplicationCert"
);
ICertificateLoader loader = new DefaultCertificateLoader();
loader.LoadIfNeeded(certDescription);
var app = ConfidentialClientApplicationBuilder.Create(clientId)
.WithCertificate(certDescription.Certificate)
.WithTenantId(tenantId)
.Build();
Ön koşullar:
- Key Vault erişimi olan Yönetilen Kimlik veya Hizmet Sorumlusu
-
Azure.IdentityNuGet paketi - Key Vault izni:
Getsertifikalar üzerinde
Sertifika deposundan yükleme
Windows sertifika deposundan ayırt edici ada göre bir sertifika yükleyin.
var certDescription = CertificateDescription.FromStoreWithDistinguishedName(
distinguishedName: "CN=MyApp.contoso.com",
storeName: StoreName.My,
storeLocation: StoreLocation.CurrentUser
);
ICertificateLoader loader = new DefaultCertificateLoader();
loader.LoadIfNeeded(certDescription);
var app = ConfidentialClientApplicationBuilder.Create(clientId)
.WithCertificate(certDescription.Certificate)
.WithTenantId(tenantId)
.Build();
Sertifikayı parmak iziyle de bulabilirsiniz:
var certDescription = CertificateDescription.FromStoreWithThumbprint(
thumbprint: "ABCDEF1234567890ABCDEF1234567890ABCDEF12",
storeName: StoreName.My,
storeLocation: StoreLocation.LocalMachine
);
Dosya sisteminden yükleme
Yerel dosya sistemindeki bir PFX dosyasından sertifika yükleyin.
var certDescription = CertificateDescription.FromPath(
path: @"C:\Certificates\MyAppCert.pfx",
password: ConfigurationManager.AppSettings["Certificate:Password"]
);
ICertificateLoader loader = new DefaultCertificateLoader();
loader.LoadIfNeeded(certDescription);
var app = ConfidentialClientApplicationBuilder.Create(clientId)
.WithCertificate(certDescription.Certificate)
.WithTenantId(tenantId)
.Build();
Güvenlik notu: Parolaları asla sabit kodlama. Güvenli yapılandırmayı kullanın.
Base64 ile kodlanmış dizeden yükleme
Yapılandırmada depolanan Base64 kodlu dizeden bir sertifika yükleyin.
string base64Cert = ConfigurationManager.AppSettings["Certificate:Base64"];
var certDescription = CertificateDescription.FromBase64Encoded(
base64EncodedValue: base64Cert,
password: ConfigurationManager.AppSettings["Certificate:Password"] // Optional
);
ICertificateLoader loader = new DefaultCertificateLoader();
loader.LoadIfNeeded(certDescription);
App.config'dan sertifika yüklemeyi yapılandırma
App.config dosyanızda sertifika ayarlarını tanımlayın ve çalışma zamanında yükleyin.
App.config:
<appSettings>
<add key="AzureAd:ClientId" value="your-client-id" />
<add key="AzureAd:TenantId" value="your-tenant-id" />
<!-- Option 1: KeyVault -->
<add key="Certificate:SourceType" value="KeyVault" />
<add key="Certificate:KeyVaultUrl" value="https://my-vault.vault.azure.net" />
<add key="Certificate:KeyVaultCertificateName" value="MyCert" />
<!-- Option 2: Store -->
<!--
<add key="Certificate:SourceType" value="StoreWithThumbprint" />
<add key="Certificate:CertificateThumbprint" value="ABCD..." />
<add key="Certificate:CertificateStorePath" value="CurrentUser/My" />
-->
</appSettings>
<connectionStrings>
<add name="TokenCache"
connectionString="Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=TokenCache;Integrated Security=True;" />
</connectionStrings>
Sertifikayı yapılandırmaya göre yüklemek için aşağıdaki yardımcı yöntemi kullanın:
public static CertificateDescription GetCertificateFromConfig()
{
string sourceType = ConfigurationManager.AppSettings["Certificate:SourceType"];
return sourceType switch
{
"KeyVault" => CertificateDescription.FromKeyVault(
ConfigurationManager.AppSettings["Certificate:KeyVaultUrl"],
ConfigurationManager.AppSettings["Certificate:KeyVaultCertificateName"]
),
"StoreWithThumbprint" => CertificateDescription.FromStoreWithThumbprint(
ConfigurationManager.AppSettings["Certificate:CertificateThumbprint"],
StoreName.My,
StoreLocation.CurrentUser
),
_ => throw new ConfigurationErrorsException("Invalid certificate source type")
};
}
Örnek uygulamaları keşfetme
Çalışan uygulamaları görmek için bu örnekleri gözden geçirin.
Resmi Microsoft örneklerini gözden geçirin
Aşağıdaki tabloda belirteç önbelleğe alma ve sertifika yüklemeyi gösteren resmi örnekler listeleniyor.
| Örnek | Platform | Açıklama |
|---|---|---|
| ConfidentialClientTokenCache | Konsol (.NET Framework) | Belirteç önbelleği serileştirme desenleri |
| active-directory-dotnetcore-daemon-v2 | Konsol (.NET Core) | Key Vault'dan sertifika yükleme |
En iyi yöntemleri izleyin
Güvenilir ve güvenli uygulamalar oluşturmak için bu desenleri uygulayın.
Önerilen desenleri izleyin
1. IConfidentialClientApplication için tekil deseni kullanın:
Tek bir örnek oluşturun ve bunu uygulamanızda yeniden kullanabilirsiniz.
private static IConfidentialClientApplication _app;
public static IConfidentialClientApplication GetApp()
{
if (_app == null)
{
_app = ConfidentialClientApplicationBuilder.Create(clientId)
.WithClientSecret(clientSecret)
.WithTenantId(tenantId)
.Build();
_app.AddDistributedTokenCaches(/* ... */);
}
return _app;
}
2. Uygun jeton önbelleği süre sonunu ayarlayın:
Gereksiz yeniden alımı önlemek için belirteç ömrünün ötesinde kayan zaman aşımını yapılandırın.
// Access tokens typically expire after 1 hour
// Set cache expiration ABOVE token lifetime
options.DefaultSlidingExpiration = TimeSpan.FromMinutes(90);
3. Güvenli sertifika depolama alanı kullanın:
Sertifikaları Azure Key Vault veya düzgün güvenli bir sertifika deposunda depolayın.
// Azure Key Vault (production)
var cert = CertificateDescription.FromKeyVault(keyVaultUrl, certName);
// Certificate store with proper permissions
var cert = CertificateDescription.FromStoreWithThumbprint(
thumbprint, StoreName.My, StoreLocation.LocalMachine);
4. Uygun hata işlemeyi uygulayın:
MSAL özel durumlarını yakalayın ve sorun giderme için ilişkilendirme kimliğini kayıt altına alın.
try
{
var result = await app.AcquireTokenForClient(scopes).ExecuteAsync();
}
catch (MsalServiceException ex)
{
logger.Error($"Token acquisition failed. CorrelationId: {ex.CorrelationId}, ErrorCode: {ex.ErrorCode}");
throw;
}
5. Üretim için dağıtılmış önbellek kullanın:
Dağıtılmış önbellek, belirteçleri örnekler arasında paylaşır ve yeniden başlatmalarda kalıcı hale gelir.
// Correct for daemon services
app.AddDistributedTokenCaches(services =>
{
services.AddDistributedSqlServerCache(/* ... */);
});
Yaygın hatalardan kaçının
1. Yeni IConfidentialClientApplication örneklerini tekrar tekrar oluşturmayın:
// Wrong - creates new instance every time
public void AcquireToken()
{
var app = ConfidentialClientApplicationBuilder.Create(clientId).Build();
// ...
}
// Correct - use singleton
private static readonly IConfidentialClientApplication _app = BuildApp();
2. Gizli dizileri sabit kodlamayın:
// Wrong
.WithClientSecret("supersecretvalue123")
// Correct
.WithClientSecret(ConfigurationManager.AppSettings["AzureAd:ClientSecret"])
3. Çok örnekli hizmetler için bellek içi önbellek kullanmayın:
// Wrong for services with multiple instances
app.AddInMemoryTokenCache();
// Correct - use distributed cache
app.AddDistributedTokenCaches(services =>
{
services.AddDistributedSqlServerCache(/* ... */);
});
4. Sertifika doğrulamayı yoksaymayın:
// Wrong - skips validation
ServicePointManager.ServerCertificateValidationCallback = (sender, cert, chain, errors) => true;
// Correct - validate certificates properly
ADAL.NET'ten geçiş yapın
Önemli farkları gözden geçirin ve kodunuzu MSAL.NET'i Microsoft.Identity.Web ile kullanacak şekilde güncelleyin.
Önemli farkları anlama
| Görünüş | ADAL.NET (kullanım dışı) | MSAL.NET + Microsoft. Identity.Web |
|---|---|---|
| Kapsamlar | Kaynak tabanlı (https://graph.microsoft.com) |
Kapsam tabanlı (https://graph.microsoft.com/.default) |
| Belirteç Önbelleği | El ile serileştirme gerekiyor | Uzantı yöntemleri aracılığıyla yerleşik bağdaştırıcılar |
| Certificates | El ile X509Certificate2 yüklemesi |
DefaultCertificateLoader birden çok kaynakla |
| Otorite | Oluşturma sırasında sabitlenmiştir | İstek başına geçersiz kılınabilir |
Geçiş örneklerini karşılaştırma
ADAL.NET (Eski):
AuthenticationContext authContext = new AuthenticationContext(authority);
ClientCredential credential = new ClientCredential(clientId, clientSecret);
AuthenticationResult result = await authContext.AcquireTokenAsync(resource, credential);
Microsoft.Identity.Web ile MSAL.NET (Yeni):
var app = ConfidentialClientApplicationBuilder.Create(clientId)
.WithClientSecret(clientSecret)
.WithTenantId(tenantId)
.Build();
app.AddInMemoryTokenCache(); // Add token cache
string[] scopes = new[] { "https://graph.microsoft.com/.default" };
AuthenticationResult result = await app.AcquireTokenForClient(scopes).ExecuteAsync();
İlgili içeriği keşfetme
İlgili senaryolar hakkında daha fazla bilgi edinmek için bu kaynakları kullanın.