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.
Web Uygulamasında kimlik doğrulaması yapmak için standart bir kimlik doğrulama mekanizması kullanmayı göz önünde bulundurun
| Başlık | Ayrıntılar |
|---|---|
| Bileşen | Web Uygulaması |
| SDL Aşaması | Derleme |
| Geçerli Teknolojiler | Genel |
| Öznitelikler | Yok |
| Referanslar | Yok |
| Ayrıntılar | Kimlik doğrulaması, bir varlığın kimliğini, genellikle kullanıcı adı ve parola gibi kimlik bilgileri aracılığıyla kanıtladığı işlemdir. Dikkate alınabilecek birden çok kimlik doğrulama protokolü vardır. Bunlardan bazıları aşağıda listelenmiştir:
Kaynak işlemi tanımlamak için standart bir kimlik doğrulama mekanizması kullanmayı göz önünde bulundurun |
Uygulamaların başarısız kimlik doğrulama senaryolarını güvenli bir şekilde işlemesi gerekir
| Başlık | Ayrıntılar |
|---|---|
| Bileşen | Web Uygulaması |
| SDL Aşaması | Derleme |
| Geçerli Teknolojiler | Genel |
| Öznitelikler | Yok |
| Referanslar | Yok |
| Ayrıntılar | Kullanıcıların kimliğini açıkça doğrulayan uygulamaların başarısız kimlik doğrulama senaryolarını güvenli bir şekilde işlemesi gerekir. Kimlik doğrulama mekanizmasının aşağıdakileri yapması gerekir:
Test için:
|
Adım adım veya uyarlamalı kimlik doğrulamasını etkinleştirme
| Başlık | Ayrıntılar |
|---|---|
| Bileşen | Web Uygulaması |
| SDL Aşaması | Derleme |
| Geçerli Teknolojiler | Genel |
| Öznitelikler | Yok |
| Referanslar | Yok |
| Ayrıntılar | Kullanıcının hassas bilgilere erişim izni verilmeden önce zorlanması için uygulamanın ek yetkilendirmeye sahip olduğunu doğrulayın (örneğin, sms, e-posta vb. ile OTP gönderme veya yeniden kimlik doğrulaması isteme gibi çok faktörlü kimlik doğrulaması yoluyla adım adım veya uyarlamalı kimlik doğrulaması). Bu kural, bir hesapta veya eylemde kritik değişiklikler yapmak için de geçerlidir Bu, kimlik doğrulaması uyarlamasının uygulamanın bağlama duyarlı yetkilendirmeyi doğru bir şekilde uygulayarak örneğin parametre üzerinde değişiklik yapma yoluyla yetkisiz işleme izin vermeyecek şekilde uygulanması anlamına da gelir |
Yönetim arabirimlerinin uygun şekilde kilitlendiğinden emin olun
| Başlık | Ayrıntılar |
|---|---|
| Bileşen | Web Uygulaması |
| SDL Aşaması | Derleme |
| Geçerli Teknolojiler | Genel |
| Öznitelikler | Yok |
| Referanslar | Yok |
| Ayrıntılar | İlk çözüm, yönetim arabirimine yalnızca belirli bir kaynak IP aralığından erişim vermektir. Bu çözüm mümkün değilse, yönetim arabiriminde oturum açmak için her zaman bir adım yukarı veya uyarlamalı kimlik doğrulamasını zorunlu tutmanızı öneririz |
Parolayı unuttum işlevlerini güvenli bir şekilde uygulama
| Başlık | Ayrıntılar |
|---|---|
| Bileşen | Web Uygulaması |
| SDL Aşaması | Derleme |
| Geçerli Teknolojiler | Genel |
| Öznitelikler | Yok |
| Referanslar | Yok |
| Ayrıntılar | İlk şey, parola unutma ve diğer kurtarma yollarının parolanın kendisi yerine süre sınırlı bir etkinleştirme belirteci içeren bağlantı gönderdiğini doğrulamaktır. Bağlantı gönderilmeden önce geçici belirteçlere (sms belirteci, yerel mobil uygulamalar vb.) dayalı ek kimlik doğrulaması da gerekebilir. İkincisi, yeni parola alma işlemi devam ederken kullanıcı hesabını kilitlememeniz gerekir. Bu, bir saldırgan otomatik bir saldırıyla kullanıcıları kasıtlı olarak kilitlemeye karar verince hizmet reddi saldırısına yol açabilir. Üçüncüsü, yeni parola isteği devam ettiği her seferde, kullanıcı adı numaralandırmasını önlemek için görüntülemek üzere olduğunuz mesaj genelleştirilmelidir. Dördüncüsü, eski parolaların kullanılmasına her zaman izin verme ve güçlü bir parola ilkesi uygulama. |
Parola ve hesap ilkesinin uygulandığına emin olun
| Başlık | Ayrıntılar |
|---|---|
| Bileşen | Web Uygulaması |
| SDL Aşaması | Derleme |
| Geçerli Teknolojiler | Genel |
| Öznitelikler | Yok |
| Referanslar | Yok |
| Ayrıntılar | Kuruluş ilkesiyle uyumlu parola ve hesap ilkesi ve en iyi yöntemler uygulanmalıdır. Deneme yanılma ve sözlük tabanlı tahminlere karşı korunmak için, kullanıcıların en az 12 karakter uzunluğunda, alfasayısal ve özel karakterler içeren karmaşık parolalar oluşturmasını sağlamak amacıyla güçlü bir parola politikası uygulanmalıdır. Hesap kilitleme ilkeleri aşağıdaki şekilde uygulanabilir:
Varsayılan ve öngörülebilir hesaplardaki saldırılara karşı savunmak için tüm anahtarların ve parolaların değiştirilebilir olduğunu ve yükleme zamanından sonra oluşturulduğunu veya değiştirildiğini doğrulayın. Uygulamanın parolaları otomatik olarak oluşturması gerekiyorsa, oluşturulan parolaların rastgele olduğundan ve yüksek entropiye sahip olduğundan emin olun. |
Kullanıcı adı numaralandırmasını önlemek için denetimler uygulama
| Başlık | Ayrıntılar |
|---|---|
| Bileşen | Web Uygulaması |
| SDL Aşaması | Derleme |
| Geçerli Teknolojiler | Genel |
| Öznitelikler | Yok |
| Referanslar | Yok |
| Adımlar | Kullanıcı adı numaralandırmasını önlemek için tüm hata iletileri genelleştirilmelidir. Ayrıca bazen kayıt sayfası gibi işlevlerde bilgi sızıntısını önleyemezsiniz. Burada, bir saldırganın otomatik saldırısını önlemek için CAPTCHA gibi hız sınırlama yöntemlerini kullanmanız gerekir. |
Mümkün olduğunda, SQL Server'a bağlanmak için Windows Kimlik Doğrulamasını kullanın
| Başlık | Ayrıntılar |
|---|---|
| Bileşen | Veritabanı |
| SDL Aşaması | Derleme |
| Geçerli Teknolojiler | Yerinde |
| Öznitelikler | SQL Sürümü - Tümü |
| Referanslar | SQL Server - Kimlik Doğrulama Modu Seçme |
| Adımlar | Windows Kimlik Doğrulaması Kerberos güvenlik protokollerini kullanır, güçlü parolalar için karmaşıklık doğrulamasıyla ilgili olarak parola ilkesi zorlaması sağlar, hesap kilitleme desteği sağlar ve parola süre sonunu destekler. |
Mümkün olduğunda SQL Veritabanı bağlanmak için Microsoft Entra kimlik doğrulamasını kullanın
| Başlık | Ayrıntılar |
|---|---|
| Bileşen | Veritabanı |
| SDL Aşaması | Derleme |
| Geçerli Teknolojiler | SQL Azure |
| Öznitelikler | SQL Sürümü - V12 |
| Referanslar | Microsoft Entra kimlik doğrulamasını kullanarak SQL Veritabanı bağlanma |
| Adımlar | En düşük sürüm: Microsoft Dizin'e karşı Microsoft Entra kimlik doğrulamasını kullanmak için gereken sürüm Azure SQL Veritabanı V12'dir. |
SQL kimlik doğrulama modu kullanıldığında, SQL server'da hesap ve parola ilkesinin zorunlu kılındığından emin olun
| Başlık | Ayrıntılar |
|---|---|
| Bileşen | Veritabanı |
| SDL Aşaması | Derleme |
| Geçerli Teknolojiler | Genel |
| Öznitelikler | Yok |
| Referanslar | SQL Server parola politikası |
| Adımlar | SQL Server Kimlik Doğrulaması kullanılırken, Windows kullanıcı hesaplarına dayanmayan oturum açma bilgileri SQL Server'da oluşturulur. Hem kullanıcı adı hem de parola SQL Server kullanılarak oluşturulur ve SQL Server'da depolanır. SQL Server, Windows parola ilkesi mekanizmalarını kullanabilir. SQL Server'da kullanılan parolalara Windows'ta kullanılan aynı karmaşıklık ve süre sonu ilkelerini uygulayabilir. |
Kapsanan veritabanlarında SQL Kimlik Doğrulaması kullanmayın
| Başlık | Ayrıntılar |
|---|---|
| Bileşen | Veritabanı |
| SDL Aşaması | Derleme |
| Geçerli Teknolojiler | Şirket içi, SQL Azure |
| Öznitelikler | SQL Sürümü - MSSQL2012, SQL Sürümü - V12 |
| Referanslar | Kapsanan Veritabanlarıyla En İyi Güvenlik Yöntemleri |
| Adımlar | Zorunlu parola ilkesinin olmaması, kapsanan bir veritabanında zayıf kimlik bilgilerinin oluşturulma olasılığını artırabilir. Windows Kimlik Doğrulaması'nından yararlanın. |
SaS belirteçlerini kullanarak cihaz başına kimlik doğrulama kimlik bilgileri kullanın
| Başlık | Ayrıntılar |
|---|---|
| Bileşen | Azure Event Hubs |
| SDL Aşaması | Derleme |
| Geçerli Teknolojiler | Genel |
| Öznitelikler | Yok |
| Referanslar | Event Hubs kimlik doğrulamasına ve güvenlik modeline genel bakış |
| Adımlar | Event Hubs güvenlik modeli, Paylaşılan Erişim İmzası (SAS) belirteçleri ve olay yayımcılarının birleşimini temel alır. Yayımcı adı, belirteci alan DeviceID'yi temsil eder. Bu, oluşturulan belirteçleri ilgili cihazlarla ilişkilendirmeye yardımcı olur. Tüm iletiler hizmet tarafında kaynak ile etiketlenir ve yük içi kaynak sahtekarlık girişimlerinin algılanması sağlanır. Cihazların kimliğini doğrularken, her bir cihaz için, benzersiz bir yayımcıya özgü bir SaS (Paylaşılan Erişim İmzası) belirteci oluşturun. |
Azure Yöneticileri için Microsoft Entra çok faktörlü kimlik doğrulamasını etkinleştirme
| Başlık | Ayrıntılar |
|---|---|
| Bileşen | Azure Güven Sınırı |
| SDL Aşaması | Dağıtım |
| Geçerli Teknolojiler | Genel |
| Öznitelikler | Yok |
| Referanslar | Microsoft Entra çok faktörlü kimlik doğrulaması nedir? |
| Adımlar | çok faktörlü kimlik doğrulaması (MFA), birden fazla doğrulama yöntemi gerektiren ve kullanıcı oturum açma işlemlerine ve işlemlerine kritik bir ikinci güvenlik katmanı ekleyen bir kimlik doğrulama yöntemidir. Aşağıdaki doğrulama yöntemlerinden iki veya daha fazlasını gerektirerek çalışır:
|
Service Fabric Kümesine anonim erişimi kısıtlama
| Başlık | Ayrıntılar |
|---|---|
| Bileşen | Service Fabric Güven Sınırı |
| SDL Aşaması | Dağıtım |
| Geçerli Teknolojiler | Genel |
| Öznitelikler | Ortam - Azure |
| Referanslar | Service Fabric kümesi güvenlik senaryoları |
| Adımlar | Özellikle üzerinde üretim iş yükleri çalıştırıldığında yetkisiz kullanıcıların kümenize bağlanmasını önlemek için kümelerin her zaman güvenliği sağlanmalıdır. Service Fabric kümesi oluştururken güvenlik modunun "güvenli" olarak ayarlandığından emin olun ve gerekli X.509 sunucu sertifikasını yapılandırın. "Güvenli olmayan" bir küme oluşturmak, yönetim uç noktalarını genel İnternet'te kullanıma sunarsa anonim kullanıcıların bu kümeye bağlanmasına olanak tanır. |
Service Fabric istemci-düğüm sertifikasının düğüm-düğüm sertifikasından farklı olduğundan emin olun
| Başlık | Ayrıntılar |
|---|---|
| Bileşen | Service Fabric Güven Sınırı |
| SDL Aşaması | Dağıtım |
| Geçerli Teknolojiler | Genel |
| Öznitelikler | Ortam - Azure, Ortam - Tek başına |
| Referanslar | Service Fabric İstemciden düğüme sertifika güvenliği, İstemci sertifikası kullanarak güvenli bir kümeye bağlanma |
| Adımlar | İstemciden düğüme sertifika güvenliği, küme oluşturulurken Azure portalı, Resource Manager şablonları veya tek başına JSON şablonu aracılığıyla bir yönetici istemci sertifikası ve/veya kullanıcı istemci sertifikası belirtilerek yapılandırılır. Belirttiğiniz yönetici istemcisi ve kullanıcı istemci sertifikaları, Düğümden düğüme güvenlik için belirttiğiniz birincil ve ikincil sertifikalardan farklı olmalıdır. |
Service Fabric kümelerinde istemcilerin kimliğini doğrulamak için Microsoft Entra Id kullanma
| Başlık | Ayrıntılar |
|---|---|
| Bileşen | Service Fabric Güven Sınırı |
| SDL Aşaması | Dağıtım |
| Geçerli Teknolojiler | Genel |
| Öznitelikler | Ortam - Azure |
| Referanslar | Küme güvenlik senaryoları - Güvenlik Önerileri |
| Adımlar | Azure'da çalışan kümeler, istemci sertifikaları dışında Microsoft Entra Id kullanarak yönetim uç noktalarına erişimin güvenliğini de sağlayabilir. Azure kümelerinde, düğümden düğüme güvenlik için istemcilerin ve sertifikaların kimliğini doğrulamak için Microsoft Entra güvenliği kullanmanız önerilir. |
Service Fabric sertifikalarının onaylı bir Sertifika Yetkilisi'nden (CA) alındığından emin olun
| Başlık | Ayrıntılar |
|---|---|
| Bileşen | Service Fabric Güven Sınırı |
| SDL Aşaması | Dağıtım |
| Geçerli Teknolojiler | Genel |
| Öznitelikler | Ortam - Azure |
| Referanslar | X.509 sertifikaları ve Service Fabric |
| Adımlar | Service Fabric, düğümlerin ve istemcilerin kimliğini doğrulamak için X.509 sunucu sertifikalarını kullanır. Service Fabrics'te sertifikaları kullanırken dikkate alınması gereken bazı önemli şeyler:
|
Kimlik Sunucusu tarafından desteklenen standart kimlik doğrulama senaryolarını kullanma
| Başlık | Ayrıntılar |
|---|---|
| Bileşen | Kimlik Sunucusu |
| SDL Aşaması | Derleme |
| Geçerli Teknolojiler | Genel |
| Öznitelikler | Yok |
| Referanslar | Yok |
| Adımlar | Kimlik Sunucusu tarafından desteklenen tipik etkileşimler aşağıda verilmiştir:
|
Varsayılan Kimlik Sunucusu belirteç önbelleğini ölçeklenebilir bir alternatifle geçersiz kılma
| Başlık | Ayrıntılar |
|---|---|
| Bileşen | Kimlik Sunucusu |
| SDL Aşaması | Dağıtım |
| Geçerli Teknolojiler | Genel |
| Öznitelikler | Yok |
| Referanslar | Yok |
| Adımlar | IdentityServer'ın basit bir yerleşik bellek içi önbelleği vardır. Bu küçük ölçekli yerel uygulamalar için iyi olsa da, orta katman ve arka uç uygulamaları için aşağıdaki nedenlerle ölçeklendirilmemektedir:
|
Dağıtılan uygulamanın ikili dosyalarının dijital olarak imzalandığından emin olun
| Başlık | Ayrıntılar |
|---|---|
| Bileşen | Makine Güven Sınırı |
| SDL Aşaması | Dağıtım |
| Geçerli Teknolojiler | Genel |
| Öznitelikler | Yok |
| Referanslar | Yok |
| Adımlar | dağıtılan uygulamanın ikili dosyalarının dijital olarak imzalandığından emin olun; böylece ikili dosyaların bütünlüğü doğrulanabilir |
WCF'de MSMQ kuyruklarına bağlanırken kimlik doğrulamasını etkinleştirme
Örnek
<netMsmqBinding/> Aşağıdaki WCF yapılandırma dosyasının öğesi, WCF'ye ileti teslimi için MSMQ kuyruğuna bağlanırken kimlik doğrulamasını devre dışı bırakmasını emredmektedir.
<bindings>
<netMsmqBinding>
<binding>
<security>
<transport msmqAuthenticationMode=""None"" />
</security>
</binding>
</netMsmqBinding>
</bindings>
MSMQ'yu, gelen veya giden iletiler için Windows etki alanı veya sertifika kimlik doğrulaması gerektirecek şekilde her zaman yapılandırın.
Örnek
<netMsmqBinding/> Aşağıdaki WCF yapılandırma dosyasının öğesi, WCF'ye bir MSMQ kuyruğuna bağlanırken sertifika kimlik doğrulamasını etkinleştirmesi talimatını verir. İstemcinin kimliği X.509 sertifikaları kullanılarak doğrulanır. İstemci sertifikası, sunucunun sertifika deposunda bulunmalıdır.
<bindings>
<netMsmqBinding>
<binding>
<security>
<transport msmqAuthenticationMode=""Certificate"" />
</security>
</binding>
</netMsmqBinding>
</bindings>
WCF-Message clientCredentialType değerini "none" olarak ayarlamayın
| Başlık | Ayrıntılar |
|---|---|
| Bileşen | WCF |
| SDL Aşaması | Derleme |
| Geçerli Teknolojiler | .NET Framework 3 |
| Öznitelikler | İstemci Kimlik Bilgisi Türü - Yok |
| Referanslar | MSDN, Fortify |
| Adımlar | Kimlik doğrulamasının olmaması, herkesin bu hizmete erişebileceği anlamına gelir. İstemcilerinin kimliğini doğrulamayan bir hizmet tüm kullanıcılara erişime izin verir. Uygulamayı istemci kimlik bilgilerine göre kimlik doğrulaması için yapılandırın. Bu, clientCredentialType iletisi Windows veya Sertifika olarak ayarlanarak yapılabilir. |
Örnek
<message clientCredentialType=""Certificate""/>
WCF-Transport clientCredentialType değerini 'none' olarak ayarlamayın
| Başlık | Ayrıntılar |
|---|---|
| Bileşen | WCF |
| SDL Aşaması | Derleme |
| Geçerli Teknolojiler | Genel, .NET Framework 3 |
| Öznitelikler | İstemci Kimlik Bilgisi Türü - Yok |
| Referanslar | MSDN, Fortify |
| Adımlar | Kimlik doğrulamasının olmaması, herkesin bu hizmete erişebileceği anlamına gelir. İstemcilerinin kimliğini doğrulamayan bir hizmet, tüm kullanıcıların işlevselliğine erişmesine izin verir. Uygulamayı istemci kimlik bilgilerine göre kimlik doğrulaması için yapılandırın. Bu, clientCredentialType aktarımını Windows veya Sertifika olarak ayarlayarak yapılabilir. |
Örnek
<transport clientCredentialType=""Certificate""/>
Web API'lerinin güvenliğini sağlamak için standart kimlik doğrulama tekniklerinin kullanıldığından emin olun
| Başlık | Ayrıntılar |
|---|---|
| Bileşen | Web API'si |
| SDL Aşaması | Derleme |
| Geçerli Teknolojiler | Genel |
| Öznitelikler | Yok |
| Referanslar | ASP.NET Web API'sinde Kimlik Doğrulaması ve Yetkilendirme, ASP.NET Web API'si ile Dış Kimlik Doğrulama Hizmetleri (C#) |
| Adımlar | Kimlik doğrulaması, bir varlığın kimliğini, genellikle kullanıcı adı ve parola gibi kimlik bilgileri aracılığıyla kanıtladığı işlemdir. Dikkate alınabilecek birden çok kimlik doğrulama protokolü vardır. Bunlardan bazıları aşağıda listelenmiştir:
Başvurular bölümündeki bağlantılar, bir Web API'sinin güvenliğini sağlamak için kimlik doğrulama düzenlerinin her birinin nasıl uygulanabileceğine ilişkin alt düzey ayrıntılar sağlar. |
Microsoft Entra Id tarafından desteklenen standart kimlik doğrulama senaryolarını kullanma
| Başlık | Ayrıntılar |
|---|---|
| Bileşen | Microsoft Entra Kimlik |
| SDL Aşaması | Derleme |
| Geçerli Teknolojiler | Genel |
| Öznitelikler | Yok |
| Referanslar | Microsoft Entra Id, Microsoft Entra code Samples, Microsoft Entra geliştirici kılavuzu için Kimlik Doğrulama Senaryoları |
| Adımlar | Microsoft Entra ID, OAuth 2.0 ve OpenID Connect gibi endüstri standardı protokoller desteğiyle hizmet olarak kimlik sağlayarak geliştiriciler için kimlik doğrulamasını basitleştirir. Microsoft Entra Id tarafından desteklenen beş birincil uygulama senaryosu aşağıdadır:
Alt düzey uygulama ayrıntıları için lütfen başvurular bölümündeki bağlantılara bakın |
Varsayılan MSAL belirteci önbelleğini dağıtılmış önbellekle geçersiz kılma
| Başlık | Ayrıntılar |
|---|---|
| Bileşen | Microsoft Entra Kimlik |
| SDL Aşaması | Derleme |
| Geçerli Teknolojiler | Genel |
| Öznitelikler | Yok |
| Referanslar | MSAL.NET'de belirteç önbelleği serileştirmesi |
| Adımlar | MSAL'nin (Microsoft Authentication Library) kullandığı varsayılan önbellek bellek içi bir önbellektir ve ölçeklenebilir. Ancak, dağıtılmış belirteç önbelleği gibi alternatif olarak kullanabileceğiniz farklı seçenekler vardır. Bunlar L1/L2 mekanizmalarına sahiptir; burada L1 bellekte, L2 ise dağıtılmış önbellek uygulamasıdır. Bunlar L1 belleği sınırlamak, çıkarma ilkelerini şifrelemek veya ayarlamak için uygun şekilde yapılandırılabilir. Diğer alternatifler redis, SQL Server veya Azure Cosmos DB önbellekleridir. Dağıtılmış belirteç önbelleğinin bir uygulaması şu Öğreticide bulunabilir: ASP.NET Core MVC kullanmaya başlama. |
TokenReplayCache'in MSAL kimlik doğrulama belirteçlerinin yeniden oynatılmasını önlemek için kullanıldığından emin olun
| Başlık | Ayrıntılar |
|---|---|
| Bileşen | Microsoft Entra Kimlik |
| SDL Aşaması | Derleme |
| Geçerli Teknolojiler | Genel |
| Öznitelikler | Yok |
| Referanslar | Web Uygulamaları için Microsoft Entra Id ile Modern Kimlik Doğrulaması |
| Adımlar | TokenReplayCache özelliği, geliştiricilerin bir belirtecin birden çok kez kullanılamadığını doğrulamak amacıyla belirteçleri kaydetmek için kullanılabilecek bir depo olan bir belirteç yeniden yürütme önbelleği tanımlamasına olanak tanır. Bu, belirteç yeniden yürütme saldırısı olarak adlandırılan yaygın bir saldırıya karşı bir ölçüdür: Oturum açma sırasında gönderilen belirteci kesen bir saldırgan, yeni bir oturum oluşturmak için bu belirteci uygulamaya yeniden göndermeyi (yeniden yürütmeyi) deneyebilir. Örneğin, OIDC kod verme akışında, başarılı kullanıcı kimlik doğrulamasından sonra, bağlı olan tarafın "/signin-oidc" uç noktasına "id_token", "kod" ve "durum" parametreleriyle bir istek yapılır. Bağlı olan taraf bu isteği doğrular ve yeni bir oturum oluşturur. Bir saldırgan bu isteği yakalar ve yeniden yürütebilirse başarılı bir oturum kurabilir ve kullanıcıyı yanıltabilir. OpenID Connect'te nonce bulunması, saldırının başarıyla gerçekleştirilebileceği durumları sınırlayabilir ancak tam olarak ortadan kaldıramayabilir. Geliştiriciler uygulamalarını korumak için ITokenReplayCache uygulamasını sağlayabilir ve TokenReplayCache'e bir örnek atayabilir. |
Örnek
// ITokenReplayCache defined in MSAL
public interface ITokenReplayCache
{
bool TryAdd(string securityToken, DateTime expiresOn);
bool TryFind(string securityToken);
}
Örnek
ITokenReplayCache arabiriminin örnek bir uygulaması aşağıda verilmiştir. (Lütfen projeye özgü önbelleğe alma çerçevenizi özelleştirin ve uygulayın)
public class TokenReplayCache : ITokenReplayCache
{
private readonly ICacheProvider cache; // Your project-specific cache provider
public TokenReplayCache(ICacheProvider cache)
{
this.cache = cache;
}
public bool TryAdd(string securityToken, DateTime expiresOn)
{
if (this.cache.Get<string>(securityToken) == null)
{
this.cache.Set(securityToken, securityToken);
return true;
}
return false;
}
public bool TryFind(string securityToken)
{
return this.cache.Get<string>(securityToken) != null;
}
}
Uygulanan önbelleğe aşağıdaki gibi "TokenValidationParameters" özelliği aracılığıyla OIDC seçeneklerinde başvurulmalıdır.
OpenIdConnectOptions openIdConnectOptions = new OpenIdConnectOptions
{
AutomaticAuthenticate = true,
... // other configuration properties follow..
TokenValidationParameters = new TokenValidationParameters
{
TokenReplayCache = new TokenReplayCache(/*Inject your cache provider*/);
}
}
Bu yapılandırmanın etkinliğini test etmek için yerel OIDC korumalı uygulamanızda oturum açın ve Fiddler aracında "/signin-oidc" uç noktasına yönelik isteği yakalayın. Koruma devrede olmadığında, bu isteğin Fiddler'da yeniden oynatılması yeni bir oturum çerezini belirler. TokenReplayCache koruması eklendikten sonra istek yeniden yürütüldükten sonra uygulama aşağıdaki gibi bir özel durum oluşturur: SecurityTokenReplayDetectedException: IDX10228: The securityToken has previously been validated, securityToken: 'eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik1uQ19WWmNBVGZNNXBPWWlKSE1iYTlnb0VLWSIsImtpZCI6Ik1uQ1......
OAuth2 istemcilerinden Microsoft Entra Id'ye (veya şirket içi AD'ye) yönelik belirteç isteklerini yönetmek için MSAL kitaplıklarını kullanma
| Başlık | Ayrıntılar |
|---|---|
| Bileşen | Microsoft Entra Kimlik |
| SDL Aşaması | Derleme |
| Geçerli Teknolojiler | Genel |
| Öznitelikler | Yok |
| Referanslar | MSAL |
| Adımlar | Microsoft Kimlik Doğrulama Kitaplığı (MSAL), geliştiricilerin kullanıcıların kimliğini doğrulamak ve güvenli web API'lerine erişmek için Microsoft kimlik platformu güvenlik belirteçleri almasını sağlar. Microsoft Graph'a, diğer Microsoft API'lerine, üçüncü taraf web API'lerine veya kendi web API'nize güvenli erişim sağlamak için kullanılabilir. MSAL, .NET, JavaScript, Java, Python, Android ve iOS gibi birçok farklı uygulama mimarisini ve platformu destekler. |
MSAL, birçok platform için tutarlı bir API ile belirteç almanın birçok yolunu sunar. Uygulamanızda OAuth kitaplıklarını veya protokolüne karşı kod yazmanıza gerek yoktur. Bir kullanıcı veya uygulama adına (platforma uygun olduğunda) belirteçler alabilirsiniz.
MSAL ayrıca bir belirteç önbelleği tutar ve süresi dolmak üzere olan belirteçleri sizin için yeniler. MSAL ayrıca uygulamanızın hangi hedef kitlede oturum açmasını istediğinizi belirtmenize ve uygulamanızı yapılandırma dosyalarından ayarlamanıza ve uygulamanızın sorunlarını gidermenize yardımcı olabilir.
Field Gateway'e bağlanan cihazların kimliğini doğrulama
| Başlık | Ayrıntılar |
|---|---|
| Bileşen | IoT Alan Ağ Geçidi |
| SDL Aşaması | Derleme |
| Geçerli Teknolojiler | Genel |
| Öznitelikler | Yok |
| Referanslar | Yok |
| Adımlar | Her cihazın verilerini kabul etmeden önce ve Cloud Gateway ile yukarı akış iletişimini kolaylaştırmadan önce Field Gateway tarafından kimliğinin doğrulandığından emin olun. Ayrıca, tek tek cihazların benzersiz olarak tanımlanabilmesi için cihazların cihaz başına kimlik bilgileriyle bağlandığından emin olun. |
Cloud gateway'e bağlanan cihazların kimliğinin doğrulandığından emin olun
| Başlık | Ayrıntılar |
|---|---|
| Bileşen | IoT Cloud Gateway |
| SDL Aşaması | Derleme |
| Geçerli Teknolojiler | Genel, C#, Node.js, |
| Öznitelikler | Geçerli Değil, Ağ geçidi seçimi - Azure IoT Hub |
| Referanslar | YOK, .NET ile Azure IoT hub'ı, IoT hub'ı ve Node JS'yi kullanmaya başlama, SAS ve sertifikalarla IoT'yi güvenli hale getirme, Git deposu |
| Adımlar |
- Genel: Aktarım Katmanı Güvenliği (TLS) veya IPsec kullanarak cihazın kimliğini doğrular. Altyapı, tam asimetrik şifrelemeyi işleyemeyen cihazlarda önceden paylaşılan anahtarın (PSK) kullanılmasını desteklemelidir. Microsoft Entra ID, OAuth'den yararlanın.
-
C#: DeviceClient örneği oluştururken, Create yöntemi varsayılan olarak IoT Hub ile iletişim kurmak için AMQP protokolunu kullanan bir DeviceClient örneği oluşturur. HTTPS protokolünü kullanmak için, Create yönteminin protokolü belirtmenize olanak tanıyan geçersiz kılmasını kullanın. HTTPS protokolünü kullanıyorsanız,
Microsoft.AspNet.WebApi.Clientad alanını içermek içinSystem.Net.Http.FormattingNuGet paketini projenize eklemeniz gerekir.
Örnek
static DeviceClient deviceClient;
static string deviceKey = "{device key}";
static string iotHubUri = "{iot hub hostname}";
var messageString = "{message in string format}";
var message = new Message(Encoding.ASCII.GetBytes(messageString));
deviceClient = DeviceClient.Create(iotHubUri, new DeviceAuthenticationWithRegistrySymmetricKey("myFirstDevice", deviceKey));
await deviceClient.SendEventAsync(message);
Örnek
Node.js: Kimlik doğrulaması
Simetrik anahtar
- Azure'da IoT hub'ı oluşturma
- Cihaz kimliği kayıt defterinde giriş oluşturma
var device = new iothub.Device(null); device.deviceId = <DeviceId > registry.create(device, function(err, deviceInfo, res) {}) - Simülasyon cihazı oluşturma
var clientFromConnectionString = require('azure-iot-device-amqp').clientFromConnectionString; var Message = require('azure-iot-device').Message; var connectionString = 'HostName=<host-name>DeviceId=<device-id>SharedAccessKey=<shared-access-key>'; var client = clientFromConnectionString(connectionString);SAS Belirteci
- Simetrik anahtar kullanılırken dahili olarak oluşturulur, ancak bunu açıkça da oluşturabilir ve kullanabiliriz
- Protokol tanımlama:
var Http = require('azure-iot-device-http').Http; - SAS belirteci oluşturun:
resourceUri = encodeURIComponent(resourceUri.toLowerCase()).toLowerCase(); var deviceName = "<device-name>"; var expires = (Date.now() / 1000) + expiresInMins * 60; var toSign = resourceUri + '\n' + expires; // using crypto var decodedPassword = new Buffer(signingKey, 'base64').toString('binary'); const hmac = crypto.createHmac('sha256', decodedPassword); hmac.update(toSign); var base64signature = hmac.digest('base64'); var base64UriEncoded = encodeURIComponent(base64signature); // construct authorization string var token = "SharedAccessSignature sr=" + resourceUri + "%2fdevices%2f"+deviceName+"&sig=" + base64UriEncoded + "&se=" + expires; if (policyName) token += "&skn="+policyName; return token; - Sas belirtecini kullanarak bağlanın:
Client.fromSharedAccessSignature(sas, Http);Sertifikalar
- Sırasıyla sertifikayı ve anahtarı depolamak üzere bir .cert ve .key dosyaları oluşturmak için OpenSSL gibi herhangi bir aracı kullanarak otomatik olarak imzalanan bir X509 sertifikası oluşturun
- Sertifikaları kullanarak güvenli bağlantı kabul eden bir cihaz sağlayın.
var connectionString = '<connection-string>'; var registry = iothub.Registry.fromConnectionString(connectionString); var deviceJSON = {deviceId:"<device-id>", authentication: { x509Thumbprint: { primaryThumbprint: "<primary-thumbprint>", secondaryThumbprint: "<secondary-thumbprint>" } }} var device = deviceJSON; registry.create(device, function (err) {}); - Sertifika kullanarak cihaz bağlama
var Protocol = require('azure-iot-device-http').Http; var Client = require('azure-iot-device').Client; var connectionString = 'HostName=<host-name>DeviceId=<device-id>x509=true'; var client = Client.fromConnectionString(connectionString, Protocol); var options = { key: fs.readFileSync('./key.pem', 'utf8'), cert: fs.readFileSync('./server.crt', 'utf8') }; // Calling setOptions with the x509 certificate and key (and optionally, passphrase) will configure the client //transport to use x509 when connecting to IoT Hub client.setOptions(options); //call fn to execute after the connection is set up client.open(fn);
Cihaz başına kimlik doğrulama bilgilerini kullanma
| Başlık | Ayrıntılar |
|---|---|
| Bileşen | IoT Cloud Gateway |
| SDL Aşaması | Derleme |
| Geçerli Teknolojiler | Genel |
| Öznitelikler | Ağ geçidi seçimi - Azure IoT Hub |
| Referanslar | Azure IoT Hub Güvenlik Belirteçleri |
| Adımlar | IoT Hub düzeyinde paylaşılan erişim ilkeleri yerine Cihaz anahtarına veya İstemci Sertifikasına dayalı SaS belirteçlerini kullanarak cihaz başına kimlik doğrulaması kimlik bilgilerini kullanın. Bu, bir cihazın veya alan ağ geçidinin kimlik doğrulama belirteçlerinin başka bir cihaz tarafından yeniden kullanılmasını önler |
Yalnızca gerekli kapsayıcılara ve bloblara anonim okuma erişimi verildiğinden emin olun
| Başlık | Ayrıntılar |
|---|---|
| Bileşen | Azure Depolama |
| SDL Aşaması | Derleme |
| Geçerli Teknolojiler | Genel |
| Öznitelikler | Depolama Türü - Blob |
| Referanslar | Kapsayıcılara ve bloblara anonim okuma erişimini yönetme, Paylaşılan Erişim İmzaları, 1. Bölüm: SAS modelini anlama |
| Adımlar | Varsayılan olarak, kapsayıcıya ve içindeki bloblara yalnızca depolama hesabının sahibi erişebilir. Anonim kullanıcılara kapsayıcı ve blobları için okuma izinleri vermek için, kapsayıcı izinlerini genel erişime izin verecek şekilde ayarlayabilirsiniz. Anonim kullanıcılar, isteğin kimliğini doğrulamadan genel olarak erişilebilen bir kapsayıcıdaki blobları okuyabilir. Kapsayıcılar, kapsayıcı erişimini yönetmek için aşağıdaki seçenekleri sağlar:
Anonim erişim, belirli blobların anonim okuma erişimi için her zaman kullanılabilir olması gereken senaryolar için en iyisidir. Daha ayrıntılı denetim için, farklı izinler kullanarak ve belirli bir zaman aralığı içinde kısıtlı erişimi temsilci olarak devretmeye olanak tanıyan bir paylaşılan erişim imzası oluşturulabilir. Hassas veriler içerebilecek kapsayıcılara ve bloblara yanlışlıkla anonim erişim verilmediğinden emin olun |
SAS veya SAP kullanarak Azure depolamadaki nesnelere sınırlı erişim verme
| Başlık | Ayrıntılar |
|---|---|
| Bileşen | Azure Depolama |
| SDL Aşaması | Derleme |
| Geçerli Teknolojiler | Genel |
| Öznitelikler | Yok |
| Referanslar | Paylaşılan Erişim İmzaları, Bölüm 1: SAS modelini anlama, Paylaşılan Erişim İmzaları, Bölüm 2: Blob depolama ile SAS oluşturma ve kullanma, Paylaşılan Erişim İmzaları ve Depolanan Erişim İlkeleri kullanarak hesabınızdaki nesnelere erişim yetkisi verme |
| Adımlar | Paylaşılan erişim imzası (SAS) kullanmak, bir depolama hesabındaki nesnelere hesap erişim anahtarını kullanıma sunmadan diğer istemcilere sınırlı erişim vermenin güçlü bir yoludur. SAS, bir depolama kaynağına kimliği doğrulanmış erişim için gerekli tüm bilgileri sorgu parametrelerinde kapsayan bir URI'dir. SAS ile depolama kaynaklarına erişmek için istemcinin yalnızca SAS'yi uygun oluşturucuya veya yönteme geçirmesi gerekir. Depolama hesabınızdaki kaynaklara hesap anahtarıyla güvenilmeyecek bir istemciye erişim sağlamak istediğinizde SAS kullanabilirsiniz. Depolama hesabı anahtarlarınız hem birincil hem de ikincil anahtar içerir. Bu anahtarlardan her ikisi de hesabınıza ve içindeki tüm kaynaklara yönetici erişimi verir. Hesap anahtarlarınızdan birini kullanıma açmak, hesabınızı kötü amaçlı veya ihmalkar kullanım olasılığına açar. Paylaşılan erişim imzaları, diğer istemcilerin depolama hesabınızdaki verileri, sizin vermiş olduğunuz izinlere göre ve hesap anahtarına gerek kalmadan okumasına, yazmasına ve silmesine olanak tanıyan güvenli bir alternatif sağlar. Her seferinde benzer mantıksal bir parametre kümeniz varsa, Saklı Erişim İlkesi (SAP) kullanmak daha iyi bir fikirdir. Saklı Erişim İlkesinden türetilen bir SAS kullanmak size bu SAS'yi hemen iptal etme olanağı sağladığından, mümkün olduğunda her zaman Saklı Erişim İlkeleri'ni kullanmak önerilen en iyi yöntemdir. |