Microsoft kimlik platformu imzalama anahtarı geçişi
Bu makalede, güvenlik belirteçlerini imzalamak için Microsoft kimlik platformu tarafından kullanılan ortak anahtarlar hakkında bilmeniz gerekenler açıklanır. Bu anahtarların düzenli aralıklarla devredildiğini ve acil bir durumda hemen teslim edilebileceğini unutmayın. Microsoft kimlik platformu kullanan tüm uygulamaların anahtar geçişi işlemini program aracılığıyla işleyebilmesi gerekir. Anahtarların nasıl çalıştığını, geçiş işleminin uygulamanıza etkisini nasıl değerlendirebilirsiniz? Ayrıca, gerekirse uygulamanızı güncelleştirmeyi veya anahtar geçişi işlemek için düzenli bir el ile geçiş işlemi oluşturmayı da öğreneceksiniz.
Microsoft kimlik platformu imzalama anahtarlarına genel bakış
Microsoft kimlik platformu, kendisi ile onu kullanan uygulamalar arasında güven oluşturmak için sektör standartlarına dayalı olarak oluşturulmuş ortak anahtar şifrelemesini kullanır. Pratik olarak, bu şu şekilde çalışır: Microsoft kimlik platformu ortak ve özel anahtar çifti içeren bir imzalama anahtarı kullanır. Kullanıcı kimlik doğrulaması için Microsoft kimlik platformu kullanan bir uygulamada oturum açtığında, Microsoft kimlik platformu kullanıcı hakkında bilgi içeren bir güvenlik belirteci oluşturur. Bu belirteç, uygulamaya geri gönderilmeden önce özel anahtarı kullanılarak Microsoft kimlik platformu tarafından imzalanır. Belirtecin geçerli olduğunu ve Microsoft kimlik platformu kaynaklandığını doğrulamak için, uygulamanın kiracının OpenID Connect bulma belgesinde veya SAML/WS-Fed federasyon meta verileri belgesinde yer alan Microsoft kimlik platformu tarafından kullanıma sunulan ortak anahtarları kullanarak belirtecin imzasını doğrulaması gerekir.
Güvenlik amacıyla, Microsoft kimlik platformu imzalama anahtarı düzenli aralıklarla alınır ve acil bir durumda hemen dağıtılabilir. Bu anahtar ruloları arasında ayarlanmış veya garantili süre yoktur. Microsoft kimlik platformu ile tümleşen tüm uygulamalar, ne sıklıkta gerçekleşebilirse gerçekleşsin anahtar geçişi olayını işlemeye hazır olmalıdır. Uygulamanız ani yenilemeleri işlemezse ve belirteçte imzayı doğrulamak için süresi dolmuş bir anahtar kullanmayı denerse, uygulamanız belirteci yanlış reddeder. Anahtar meta verilerinin doğru şekilde yenilendiğinden ve güncel tutulduğundan emin olmak için standart kitaplıkların kullanılması önerilir. Standart kitaplıkların kullanılmadığı durumlarda uygulamanın en iyi yöntemler bölümünü izlediğinden emin olun.
OpenID Connect bulma belgesinde ve federasyon meta verileri belgesinde her zaman birden fazla geçerli anahtar bulunur. Uygulamanız belgede belirtilen anahtarların herhangi birini ve tümünü kullanmaya hazır olmalıdır, çünkü bir anahtar yakında alınabilir, başka bir anahtar onun yerine geçebilir vb. Mevcut anahtar sayısı, yeni platformları, yeni bulutları veya yeni kimlik doğrulama protokollerini desteklediğimiz için Microsoft kimlik platformu iç mimarisine göre zaman içinde değişebilir. Ne JSON yanıtında anahtarların sırası ne de kullanıma sunulma sırası uygulamanız için anlamlı olarak kabul edilmemelidir. JSON Web Anahtarı veri yapısı hakkında daha fazla bilgi edinmek için RFC7517 başvurabilirsiniz.
Yalnızca tek bir imzalama anahtarını destekleyen uygulamalar veya imzalama anahtarlarında el ile güncelleştirme gerektiren uygulamalar doğal olarak daha az güvenli ve daha az güvenilirdir. Diğer en iyi yöntemlerle birlikte her zaman güncel imzalama anahtarları kullandıklarını güvence altına almak için standart kitaplıkları kullanacak şekilde güncelleştirilmeleri gerekir.
Anahtar meta verilerini önbelleğe alma ve doğrulama için en iyi yöntemler
- OpenID Connect (OIDC) ve Federasyon meta verilerinde açıklandığı gibi kiracıya özgü uç noktayı kullanarak anahtarları bulma
- Uygulamanız birden çok kiracıya dağıtılsa bile, uygulamanın hizmet vermekte olduğu her kiracı için anahtarları her zaman bağımsız olarak bulmanız ve önbelleğe almak önerilir (kiracıya özgü uç nokta kullanılarak). Günümüzde kiracılar arasında ortak olan bir anahtar, gelecekte kiracılar arasında ayrı olabilir.
- Önbelleğe alma işleminin dayanıklı ve güvenli olduğundan emin olmak için aşağıdaki önbelleğe alma algoritmasını kullanın
Anahtar meta verileri önbelleğe alma algoritması:
Standart kitaplıklarımız, anahtarların dayanıklı ve güvenli bir şekilde önbelleğe alınmasını sağlar. Uygulamada küçük hatalardan kaçınmak için bunları kullanmanız önerilir. Özel uygulamalar için kaba algoritma şu şekildedir:
Genel dikkat edilmesi gerekenler:
- Belirteçleri doğruleyen hizmet, birçok farklı anahtarı (10-1000) depolayabilen bir önbelleğe sahip olmalıdır.
- Anahtarlar, bir önbellek anahtarı olarak anahtar kimliği ("OIDC anahtarları meta veri belirtimindeki çocuk" kullanılarak tek tek önbelleğe alınmalıdır.
- Önbellekteki anahtarların yaşam süresi 24 saat olarak yapılandırılmalıdır ve yenilemeler saatte bir gerçekleştirilir. Bu, sistemin kaldırılan anahtarlara hızlı bir şekilde yanıt vermesini sağlar, ancak anahtarları getirmeyle ilgili sorunlardan etkilenmemek için yeterli önbellek süresine sahiptir.
- Anahtarlar yenilenmelidir:
- İşlem başlatıldığında veya önbellek boş olduğunda
- Arka plan işi olarak düzenli aralıklarla (1 saatte bir önerilir)
- Alınan belirteç bilinmeyen bir anahtarla (üst bilgide bilinmeyen çocuk veya tid ) imzalandıysa dinamik olarak
KeyRefresh yordamı (IdentityModel'den kavramsal algoritma)
Başlatma
Yapılandırma yöneticisi, yapılandırma verilerini getirmek için belirli bir adresle ve bu verileri alıp doğrulamak için gerekli arabirimlerle ayarlanır.
Yapılandırma Denetimi
Sistem, yeni verileri getirmeden önce önceden tanımlanmış yenileme aralığına göre mevcut verilerin hala geçerli olup olmadığını denetler.
Veri Alma Veriler eskiyse veya eksikse, yinelemeyi (ve iş parçacığı tükenmesini) önlemek için yalnızca bir iş parçacığının yeni verileri getirmesini sağlamak için sistem kilitlenir. Sistem daha sonra belirtilen uç noktadan en son yapılandırma verilerini almayı dener.
Doğrulama
Yeni veriler alındıktan sonra, gerekli standartları karşıladığından ve bozulmadığından emin olmak için doğrulanır. Meta veriler yalnızca gelen istek yeni anahtarlarla başarıyla doğrulandığında kabul edilir.
Hata İşleme
Veri alma sırasında herhangi bir hata oluşursa günlüğe kaydedilir. Yeni veriler getirilemiyorsa sistem bilinen son iyi yapılandırmayla çalışmaya devam eder
Otomatik Güncelleştirmeler Sistem, yenileme aralığına göre yapılandırma verilerini düzenli aralıklarla otomatik olarak denetler ve güncelleştirir (artı veya eksi 1 s hareket hızıyla 12 saat önerilir). Ayrıca gerekirse el ile güncelleştirme isteğinde bulunarak verilerin her zaman güncel olduğundan emin olabilir.
Yeni anahtarla belirtecin doğrulanması Belirteç henüz yapılandırmadan bilinmeyen bir imzalama anahtarıyla gelirse, sistem beklenen normal güncelleştirmelerin dışında meta verilerdeki yeni anahtarları işlemek için sık erişimli yolda eşitleme çağrısıyla yapılandırmayı getirmeye çalışır (ancak 5 dakikadan daha sık olmaz)
Bu yaklaşım, sistemin her zaman en güncel ve geçerli yapılandırma verilerini kullanmasını sağlarken hataları düzgün bir şekilde işler ve gereksiz işlemleri önler.
Bu algoritmanın .NET uygulaması BaseConfigurationManager'dan kullanılabilir. Dayanıklılık ve güvenlik değerlendirmelerine göre değiştirilebilir. Burada ayrıca bir açıklamaya da bakın
KeyRefresh yordamı (sahte kod):
Bu yordam, anahtarları çok sık yenileyen koşulları önlemek için genel (lastSuccessfulRefreshTime zaman damgası) kullanır.
KeyRefresh(issuer)
{
// Store cache entries and last successful refresh timestamp per distinct 'issuer'
if (LastSuccessfulRefreshTime is set and more recent than 5 minutes ago)
return // without refreshing
// Load keys URI using the tenant-specific OIDC configuration endpoint ('issuer' is the input parameter)
oidcConfiguration = download JSON from "{issuer}/.well-known/openid-configuration"
// Load list of keys from keys URI
keyList = download JSON from jwks_uri property of oidcConfiguration
foreach (key in keyList)
{
cache entry = lookup in cache by kid property of key
if (cache entry found)
set expiration of cache entry to now + 24h
else
add key to cache with expiration set to now + 24h
}
set LastSuccessfulRefreshTime to now // current timestamp
}
Hizmet Başlatma yordamı:
- Anahtarları güncelleştirmek için KeyRefresh
- Saatte bir KeyRefresh'i çağıran bir arka plan işi başlatma
Anahtarı doğrulamak için TokenValidation yordamı (sahte kod):
ValidateToken(token)
{
kid = token.header.kid // get key id from token header
issuer = token.body.iss // get issuer from 'iss' claim in token body
key = lookup in cache by issuer and kid
if (key found)
{
validate token with key and return
}
else // key is not found in the cache
{
call KeyRefresh(issuer) // to opportunistically refresh the keys for the issuer
key = lookup in cache by issuer and kid
if (key found)
{
validate token with key and return
}
else // key is not found in the cache even after refresh
{
return token validation error
}
}
}
Uygulamanızın etkilenip etkilenmeyeceğini ve bu konuda ne yapılacağını değerlendirme
Uygulamanızın anahtar geçişi nasıl işlediği, uygulama türü veya hangi kimlik protokolü ve kitaplığının kullanıldığı gibi değişkenlere bağlıdır. Aşağıdaki bölümler, en yaygın uygulama türlerinin anahtar geçişinden etkilenip etkilenmediğini değerlendirir ve otomatik geçişi desteklemek veya anahtarı el ile güncelleştirmek için uygulamanın nasıl güncelleştirildiği konusunda rehberlik sağlar.
- Kaynaklara erişen yerel istemci uygulamaları
- Kaynaklara erişen web uygulamaları /API'ler
- Kaynakları koruyan ve Azure Uygulaması Hizmetleri kullanılarak oluşturulan web uygulamaları/API'ler
- OWIN OpenID Connect, WS-Fed veya WindowsAzureActiveDirectoryBearerAuthentication ara yazılımını ASP.NET kullanarak kaynakları koruyan web uygulamaları/API'ler
- ASP.NET Core OpenID Connect veya JwtBearerAuthentication ara yazılımını kullanarak kaynakları koruyan web uygulamaları/API'ler
- Node.js
passport-azure-ad
modülünü kullanarak kaynakları koruyan web uygulamaları /API'ler - Kaynakları koruyan ve Visual Studio 2015 veya sonraki sürümlerle oluşturulan web uygulamaları /API'ler
- Kaynakları koruyan ve Visual Studio 2013 ile oluşturulan web uygulamaları
- Kaynakları koruyan ve Visual Studio 2013 ile oluşturulan Web API'leri
- Kaynakları koruyan ve Visual Studio 2012 ile oluşturulan web uygulamaları
- Diğer kitaplıkları kullanarak kaynakları koruyan veya desteklenen protokollerden herhangi birini el ile uygulayan web uygulamaları/API'ler
Bu kılavuz aşağıdakiler için geçerli değildir :
- Microsoft Entra Uygulama Galerisi'nden (Özel dahil) eklenen uygulamalar, imzalama anahtarlarıyla ilgili ayrı yönergelere sahiptir. Daha fazla bilgi.
- Uygulama ara sunucusu aracılığıyla yayımlanan şirket içi uygulamaların imzalama anahtarları konusunda endişelenmesi gerekmez.
Kaynaklara erişen yerel istemci uygulamaları
Yalnızca kaynaklara erişen uygulamalar (örneğin, Microsoft Graph, KeyVault, Outlook API ve diğer Microsoft API'leri) yalnızca bir belirteç alır ve bunu kaynak sahibine iletir. Hiçbir kaynağı korumadıkları göz önünde bulundurulduğunda, belirteci incelemez ve bu nedenle doğru imzalı olduğundan emin olmaları gerekmez.
İster masaüstü ister mobil olsun yerel istemci uygulamaları bu kategoriye girer ve bu nedenle geçişten etkilenmez.
Kaynaklara erişen web uygulamaları /API'ler
Yalnızca kaynaklara (Microsoft Graph, KeyVault, Outlook API ve diğer Microsoft API'leri gibi) erişen uygulamalar yalnızca bir belirteç alır ve bunu kaynak sahibine iletir. Hiçbir kaynağı korumadıkları göz önünde bulundurulduğunda, belirteci incelemez ve bu nedenle doğru imzalı olduğundan emin olmaları gerekmez.
Belirteç istemek için yalnızca uygulama akışını (istemci kimlik bilgileri / istemci sertifikası) kullanan web uygulamaları ve web API'leri bu kategoriye girer ve bu nedenle geçişten etkilenmez.
Kaynakları koruyan ve Azure Uygulaması Hizmetleri kullanılarak oluşturulan web uygulamaları/API'ler
Azure Uygulaması Hizmetleri'nin Kimlik Doğrulama / Yetkilendirme (EasyAuth) işlevselliği, anahtar geçişinin otomatik olarak işlenmesi için gerekli mantığa zaten sahiptir.
OWIN OpenID Connect, WS-Fed veya WindowsAzureActiveDirectoryBearerAuthentication ara yazılımını ASP.NET kullanarak kaynakları koruyan web uygulamaları/API'ler
Uygulamanız ASP.NET OWIN OpenID Connect, WS-Fed veya WindowsAzureActiveDirectoryBearerAuthentication ara yazılımını kullanıyorsa, anahtar geçişinin otomatik olarak işlenmesi için gerekli mantığa zaten sahiptir.
Uygulamanızın Startup.cs veya Startup.Auth.cs dosyalarında aşağıdaki kod parçacıklarından herhangi birini arayarak uygulamanızın bunlardan herhangi birini kullandığını onaylayabilirsiniz.
app.UseOpenIdConnectAuthentication(
new OpenIdConnectAuthenticationOptions
{
// ...
});
app.UseWsFederationAuthentication(
new WsFederationAuthenticationOptions
{
// ...
});
app.UseWindowsAzureActiveDirectoryBearerAuthentication(
new WindowsAzureActiveDirectoryBearerAuthenticationOptions
{
// ...
});
.NET Core OpenID Connect veya JwtBearerAuthentication ara yazılımını kullanarak kaynakları koruyan web uygulamaları /API'ler
Uygulamanız ASP.NET OWIN OpenID Connect veya JwtBearerAuthentication ara yazılımını kullanıyorsa, anahtar geçişinin otomatik olarak işlenmesi için gerekli mantığa zaten sahiptir.
Uygulamanızın Startup.cs veya Startup.Auth.cs aşağıdaki kod parçacıklarından herhangi birini arayarak uygulamanızın bunlardan herhangi birini kullandığını onaylayabilirsiniz
app.UseOpenIdConnectAuthentication(
new OpenIdConnectAuthenticationOptions
{
// ...
});
app.UseJwtBearerAuthentication(
new JwtBearerAuthenticationOptions
{
// ...
});
Node.js passport-azure-ad
modülünü kullanarak kaynakları koruyan web uygulamaları/API'ler
Uygulamanız Node.js passport-ad modülünü kullanıyorsa anahtar geçişinin otomatik olarak işlenmesi için gerekli mantığa zaten sahiptir.
Uygulamanızın app.js aşağıdaki kod parçacığını arayarak passport-ad uygulamanızı onaylayabilirsiniz
var OIDCStrategy = require('passport-azure-ad').OIDCStrategy;
passport.use(new OIDCStrategy({
//...
));
Kaynakları koruyan ve Visual Studio 2015 veya sonraki sürümlerle oluşturulan web uygulamaları /API'ler
Uygulamanız Visual Studio 2015 veya sonraki sürümlerinde bir web uygulaması şablonu kullanılarak oluşturulduysa ve Kimlik Doğrulamasını Değiştir menüsünden İş veya Okul Hesapları'nı seçtiyseniz, anahtar geçişinin otomatik olarak işlenmesi için gerekli mantığa zaten sahiptir. OWIN OpenID Connect ara yazılımına eklenen bu mantık, Anahtarları OpenID Connect bulma belgesinden alır ve önbelleğe alır ve önbelleğe alır ve düzenli aralıklarla yeniler.
Çözümünüzde el ile kimlik doğrulaması eklediyseniz, uygulamanız gerekli anahtar geçişi mantığına sahip olmayabilir. Bunu kendiniz yazabilir veya diğer kitaplıkları kullanarak veya desteklenen protokollerden herhangi birini el ile uygulayarak Web uygulamaları/API'leri içindeki adımları izleyebilirsiniz.
Kaynakları koruyan ve Visual Studio 2013 ile oluşturulan web uygulamaları
Uygulamanız Visual Studio 2013'te bir web uygulaması şablonu kullanılarak oluşturulduysa ve Kimlik Doğrulamasını Değiştir menüsünden Kuruluş Hesapları'nı seçtiyseniz, anahtar geçişinin otomatik olarak işlenmesi için gerekli mantığa zaten sahiptir. Bu mantık, kuruluşunuzun benzersiz tanımlayıcısını ve imzalama anahtarı bilgilerini projeyle ilişkili iki veritabanı tablosuna depolar. Veritabanının bağlantı dizesi projenin Web.config dosyasında bulabilirsiniz.
Çözümünüzde el ile kimlik doğrulaması eklediyseniz, uygulamanız gerekli anahtar geçişi mantığına sahip olmayabilir. Bunu kendiniz yazmanız veya diğer kitaplıkları kullanarak veya desteklenen protokollerden herhangi birini el ile uygulayarak Web uygulamaları /API'leri içindeki adımları izlemeniz gerekir..
Aşağıdaki adımlar, mantığın uygulamanızda düzgün çalıştığını doğrulamanıza yardımcı olur.
- Visual Studio 2013'te çözümü açın ve ardından sağ penceredeki Sunucu Gezgini sekmesini seçin.
- Veri Bağlantıları, DefaultConnection ve ardından Tablolar'ı genişletin. IssuingAuthorityKeys tablosunu bulun, sağ tıklayın ve Tablo Verilerini Göster'i seçin.
- IssuingAuthorityKeys tablosunda, anahtarın parmak izi değerine karşılık gelen en az bir satır olacaktır. Tablodaki satırları silin.
- Kiracılar tablosuna sağ tıklayın ve tablo verilerini göster'i seçin.
- Kiracılar tablosunda, benzersiz bir dizin kiracı tanımlayıcısına karşılık gelen en az bir satır olacaktır. Tablodaki satırları silin. Hem Tenants tablosundaki hem de IssuingAuthorityKeys tablosundaki satırları silmezseniz, çalışma zamanında bir hata alırsınız.
- Uygulamayı derleyin ve çalıştırın. Hesabınızda oturum açtıktan sonra uygulamayı durdurabilirsiniz.
- Sunucu Gezgini'ne dönün ve IssuingAuthorityKeys ve Tenants tablosundaki değerlere bakın. Bunların federasyon meta verileri belgesinden uygun bilgilerle otomatik olarak yeniden doldurulduğunu fark edeceksiniz.
Kaynakları koruyan ve Visual Studio 2013 ile oluşturulan Web API'leri
Visual Studio 2013'te Web API şablonunu kullanarak bir web API uygulaması oluşturduysanız ve ardından Kimlik Doğrulamasını Değiştir menüsünden Kuruluş Hesapları'nı seçtiyseniz, uygulamanızda zaten gerekli mantık vardır.
Kimlik doğrulamasını el ile yapılandırdıysanız, web API'nizi anahtar bilgilerini otomatik olarak güncelleştirecek şekilde yapılandırmayı öğrenmek için aşağıdaki yönergeleri izleyin.
Aşağıdaki kod parçacığı, federasyon meta verileri belgesinden en son anahtarların nasıl alınduğunu gösterir ve ardından belirteci doğrulamak için JWT Belirteç İşleyicisi'ni kullanır. Kod parçacığı, bir veritabanında, yapılandırma dosyasında veya başka bir yerde olsun, gelecekteki belirteçleri Microsoft kimlik platformu doğrulamak için anahtarı kalıcı hale getirmek için kendi önbelleğe alma mekanizmanızı kullanacağınızı varsayar.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IdentityModel.Tokens;
using System.Configuration;
using System.Security.Cryptography.X509Certificates;
using System.Xml;
using System.IdentityModel.Metadata;
using System.ServiceModel.Security;
using System.Threading;
namespace JWTValidation
{
public class JWTValidator
{
private string MetadataAddress = "[Your Federation Metadata document address goes here]";
// Validates the JWT Token that's part of the Authorization header in an HTTP request.
public void ValidateJwtToken(string token)
{
JwtSecurityTokenHandler tokenHandler = new JwtSecurityTokenHandler()
{
// Do not disable for production code
CertificateValidator = X509CertificateValidator.None
};
TokenValidationParameters validationParams = new TokenValidationParameters()
{
AllowedAudience = "[Your App ID URI goes here]",
ValidIssuer = "[The issuer for the token goes here, such as https://sts.windows.net/aaaabbbb-0000-cccc-1111-dddd2222eeee/]",
SigningTokens = GetSigningCertificates(MetadataAddress)
// Cache the signing tokens by your desired mechanism
};
Thread.CurrentPrincipal = tokenHandler.ValidateToken(token, validationParams);
}
// Returns a list of certificates from the specified metadata document.
public List<X509SecurityToken> GetSigningCertificates(string metadataAddress)
{
List<X509SecurityToken> tokens = new List<X509SecurityToken>();
if (metadataAddress == null)
{
throw new ArgumentNullException(metadataAddress);
}
using (XmlReader metadataReader = XmlReader.Create(metadataAddress))
{
MetadataSerializer serializer = new MetadataSerializer()
{
// Do not disable for production code
CertificateValidationMode = X509CertificateValidationMode.None
};
EntityDescriptor metadata = serializer.ReadMetadata(metadataReader) as EntityDescriptor;
if (metadata != null)
{
SecurityTokenServiceDescriptor stsd = metadata.RoleDescriptors.OfType<SecurityTokenServiceDescriptor>().First();
if (stsd != null)
{
IEnumerable<X509RawDataKeyIdentifierClause> x509DataClauses = stsd.Keys.Where(key => key.KeyInfo != null && (key.Use == KeyType.Signing || key.Use == KeyType.Unspecified)).
Select(key => key.KeyInfo.OfType<X509RawDataKeyIdentifierClause>().First());
tokens.AddRange(x509DataClauses.Select(token => new X509SecurityToken(new X509Certificate2(token.GetX509RawData()))));
}
else
{
throw new InvalidOperationException("There is no RoleDescriptor of type SecurityTokenServiceType in the metadata");
}
}
else
{
throw new Exception("Invalid Federation Metadata document");
}
}
return tokens;
}
}
}
Kaynakları koruyan ve Visual Studio 2012 ile oluşturulan web uygulamaları
Uygulamanız Visual Studio 2012'de oluşturulduysa, büyük olasılıkla uygulamanızı yapılandırmak için Kimlik ve Erişim Aracı'nı kullanmışsınızdır. Ayrıca, Doğrulayan Veren Adı Kayıt Defteri'ni (VINR) kullanıyor olmanız da olasıdır. VINR, güvenilen kimlik sağlayıcıları (Microsoft kimlik platformu) ve kendileri tarafından verilen belirteçleri doğrulamak için kullanılan anahtarlar hakkındaki bilgileri korumakla sorumludur. VINR ayrıca dizininizle ilişkili en son federasyon meta verileri belgesini indirerek, yapılandırmanın en son belgeyle güncel olup olmadığını denetleyerek ve uygulamayı gerektiğinde yeni anahtarı kullanacak şekilde güncelleştirerek web.config dosyasında depolanan anahtar bilgilerinin otomatik olarak güncelleştirilmesini kolaylaştırır.
Uygulamanızı Microsoft tarafından sağlanan kod örneklerinden veya izlenecek yol belgelerinden herhangi birini kullanarak oluşturduysanız anahtar geçişi mantığı projenize zaten dahil edilir. Aşağıdaki kodun projenizde zaten var olduğunu fark edeceksiniz. Uygulamanız bu mantığa sahip değilse, aşağıdaki adımları izleyerek uygulamayı ekleyin ve düzgün çalıştığını doğrulayın.
- Çözüm Gezgini'da, uygun proje için System.IdentityModel derlemesine bir başvuru ekleyin.
- Global.asax.cs dosyasını açın ve yönergeleri kullanarak aşağıdakileri ekleyin:
using System.Configuration; using System.IdentityModel.Tokens;
- Global.asax.cs dosyasına aşağıdaki yöntemi ekleyin:
protected void RefreshValidationSettings() { string configPath = AppDomain.CurrentDomain.BaseDirectory + "\\" + "Web.config"; string metadataAddress = ConfigurationManager.AppSettings["ida:FederationMetadataLocation"]; ValidatingIssuerNameRegistry.WriteToConfig(metadataAddress, configPath); }
- Gösterildiği gibi Global.asax.cs'daki Application_Start() yönteminde RefreshValidationSettings() yöntemini çağırın:
protected void Application_Start() { AreaRegistration.RegisterAllAreas(); ... RefreshValidationSettings(); }
Bu adımları izledikten sonra, uygulamanızın Web.config'i federasyon meta veri belgesinden en son bilgilerle (en son anahtarlar dahil) güncelleştirilir. Bu güncelleştirme, uygulama havuzunuz IIS'de her geri dönüşümde gerçekleşir; varsayılan olarak IIS, uygulamaları 29 saatte bir geri dönüşüme dönüştürecek şekilde ayarlanır.
Anahtar geçişi mantığının çalıştığını doğrulamak için aşağıdaki adımları izleyin.
- Uygulamanızın yukarıdaki kodu kullandığını doğruladıktan sonra Web.config dosyasını açın ve issuerNameRegistry> bloğuna <gidin ve özellikle aşağıdaki birkaç satırı arayın:
<issuerNameRegistry type="System.IdentityModel.Tokens.ValidatingIssuerNameRegistry, System.IdentityModel.Tokens.ValidatingIssuerNameRegistry"> <authority name="https://sts.windows.net/aaaabbbb-0000-cccc-1111-dddd2222eeee/"> <keys> <add thumbprint="AA11BB22CC33DD44EE55FF66AA77BB88CC99DD00" /> </keys>
- <add thumbprint=""> ayarında, herhangi bir karakteri farklı bir karakterle değiştirerek parmak izi değerini değiştirin. Web.config dosyasını kaydedin.
- Uygulamayı derleyin ve çalıştırın. Oturum açma işlemini tamamlayabilirseniz, uygulamanız dizininizin federasyon meta veri belgesinden gerekli bilgileri indirerek anahtarı başarıyla güncelleştiriyor. Oturum açarken sorun yaşıyorsanız, Microsoft kimlik platformu Kullanarak Web Uygulamanıza Oturum Açma Ekleme makalesini okuyarak veya şu kod örneğini indirip inceleyerek uygulamanızdaki değişikliklerin doğru olduğundan emin olun: Microsoft Entra Id için Çok Kiracılı Bulut Uygulaması.
Diğer kitaplıkları kullanarak kaynakları koruyan veya desteklenen protokollerden herhangi birini el ile uygulayan web uygulamaları/API'ler
Başka bir kitaplık kullanıyorsanız veya desteklenen protokollerden herhangi birini el ile uyguladıysanız, anahtarın OpenID Connect bulma belgesinden veya federasyon meta veri belgesinden alındığından emin olmak için kitaplığı veya uygulamanızı gözden geçirmeniz gerekir. Bunu denetlemenin bir yolu, OpenID bulma belgesine veya federasyon meta verileri belgesine yapılan çağrılar için kodunuzda veya kitaplığınızın kodunda arama yapmaktır.
Anahtar uygulamanızda bir yerde depolanıyorsa veya sabit kodlanmışsa, bu kılavuz belgesinin sonundaki yönergelere göre el ile geçiş yaparak anahtarı el ile alabilir ve uygun şekilde güncelleştirebilirsiniz. Microsoft kimlik platformu geçiş temposunu artırması veya acil durum bant dışı geçişe sahip olması durumunda gelecekteki kesintileri ve ek yükü önlemek için bu makalede açıklanan yaklaşımlardan herhangi birini kullanarak uygulamanızı otomatik geçişi destekleyecek şekilde geliştirmeniz kesinlikle tavsiye edilir.
Etkilenip etkilenmeyeceğini belirlemek için uygulamanızı test etme
Aşağıdaki PowerShell betiklerini kullanarak uygulamanızın otomatik anahtar geçişi destekleyip desteklemediğini doğrulayabilirsiniz.
İmzalama anahtarlarını PowerShell ile denetlemek ve güncelleştirmek için MSIdentityTools PowerShell modülü gerekir.
MSIdentityTools PowerShell modülünü yükleyin:
Install-Module -Name MSIdentityTools
Gerekli kapsamları kabul etmek için bir yönetici hesabıyla Connect-MgGraph komutunu kullanarak oturum açın:
Connect-MgGraph -Scope "Application.ReadWrite.All"
Kullanılabilir imzalama anahtarı parmak izlerinin listesini alın:
Get-MsIdSigningKeyThumbprint
Anahtar parmak izinden herhangi birini seçin ve Microsoft Entra Id'yi bu anahtarı uygulamanızla birlikte kullanacak şekilde yapılandırın (Microsoft Entra yönetim merkezinden uygulama kimliğini alın):
Update-MsIdApplicationSigningKeyThumbprint -ApplicationId <ApplicationId> -KeyThumbprint <Thumbprint>
Yeni bir belirteç almak için oturum açarak web uygulamasını test edin. Önemli güncelleştirme değişikliği anında gerçekleşir, ancak yeni bir belirteç verildiğinden emin olmak için yeni bir tarayıcı oturumu (örneğin, Internet Explorer'ın "InPrivate"i, Chrome'un "Gizli" veya Firefox'un "Özel" modunu kullanarak) kullandığınızdan emin olun.
Döndürülen imzalama anahtarı parmak izlerinin her biri için cmdlet'ini
Update-MsIdApplicationSigningKeyThumbprint
çalıştırın ve web uygulamanızın oturum açma işlemini test edin.Web uygulaması düzgün oturum açarsa otomatik geçişi destekler. Aksi takdirde, uygulamanızı el ile geçişi destekleyecek şekilde değiştirin. Daha fazla bilgi için Bkz . El ile geçiş işlemi oluşturma.
Normal davranışa dönmek için aşağıdaki betiği çalıştırın:
Update-MsIdApplicationSigningKeyThumbprint -ApplicationId <ApplicationId> -Default
Uygulamanız otomatik geçişi desteklemiyorsa el ile geçiş gerçekleştirme
Uygulamanız otomatik geçişi desteklemiyorsa, Microsoft kimlik platformu imzalama anahtarlarını düzenli aralıklarla izleyen ve uygun şekilde el ile geçiş gerçekleştiren bir işlem oluşturmanız gerekir.
PowerShell ile imzalama anahtarlarını denetlemek ve güncelleştirmek için PowerShell modülüne MSIdentityTools
ihtiyacınız vardır.
PowerShell modülünü
MSIdentityTools
yükleyin:Install-Module -Name MSIdentityTools
En son imzalama anahtarını alın (Microsoft Entra yönetim merkezinden kiracı kimliğini alın):
Get-MsIdSigningKeyThumbprint -Tenant <tenantId> -Latest
Bu anahtarı uygulamanızın şu anda sabit kodlanmış veya kullanmak üzere yapılandırılmış anahtarıyla karşılaştırın.
En son anahtar uygulamanızın kullandığı anahtardan farklıysa en son imzalama anahtarını indirin:
Get-MsIdSigningKeyThumbprint -Latest -DownloadPath <DownloadFolderPath>
Uygulamanızın kodunu veya yapılandırmasını yeni anahtarı kullanacak şekilde güncelleştirin.
Microsoft Entra Id'yi uygulamanızla en son anahtarı kullanacak şekilde yapılandırın (Microsoft Entra yönetim merkezinden uygulama kimliğini alın):
Get-MsIdSigningKeyThumbprint -Latest | Update-MsIdApplicationSigningKeyThumbprint -ApplicationId <ApplicationId>
Yeni bir belirteç almak için oturum açarak web uygulamasını test edin. Önemli güncelleştirme değişikliği anlıktır, ancak yeni bir belirteç verildiğinden emin olmak için yeni bir tarayıcı oturumu kullandığınızdan emin olun. Örneğin, Microsoft Edge'in "InPrivate"ını, Chrome'un "Gizli" veya Firefox'un "Özel" modunu kullanın.
Herhangi bir sorunla karşılaşırsanız, kullanmakta olduğunuz önceki anahtara geri dönüp Azure desteği başvurun:
Update-MsIdApplicationSigningKeyThumbprint -ApplicationId <ApplicationId> -KeyThumbprint <PreviousKeyThumbprint>
Uygulamanızı el ile geçişi destekleyecek şekilde güncelleştirdikten sonra normal davranışa geri dönebilirsiniz:
Update-MsIdApplicationSigningKeyThumbprint -ApplicationId <ApplicationId> -Default