SORU
28 Kasım 2008, Cuma


Nasıl etki alanı kimlik bilgilerini doğrulamak için?

Etki alanı denetleyicisine karşı kimlik bilgileri kümesi doğrulamak istiyorum. örneğin:

Username: STACKOVERFLOW\joel
Password: splotchy

Yöntem 1. Bürünme ile sorgu Active Directory

Bir sürü insan bir şey için Active Directory sorgulamak öneririz. Eğer bir özel durum oluşursa, o zaman kimlik bilgileri this stackoverflow question önerilen olarak geçerli değildir.

7 ** ancak: ciddi vardır

  1. Yalnızca bir etki alanı hesabı kimlik doğrulaması değil, aynı zamanda örtülü bir yetkilendirme kontrol yapıyoruz. Yani, bir REKLAM bürünme belirteci kullanarak özelliklerini okuyorsunuz. Eğer aksi geçerli hesap REKLAM okuma hakkı varsa? Varsayılan olarak tüm kullanıcılara okuma erişimi var, ama etki alanı ilkeleri kısıtlı hesaplar (ya da gruplar) için erişim izinleri devre dışı bırakmak için ayarlanabilir.

  2. REKLAM ciddi bir yükü vardır karşı bağlama, AD şema önbellek istemcisi (ADSI sağlayıcı ADSI önbellek DirectoryServices tarafından kullanılan) yüklü olmalıdır. Bu ağ ve REKLAM hem sunucu, kaynak tüketen ve bir kullanıcı hesabı kimlik doğrulaması gibi basit bir işlem için çok pahalı.

  3. Olmayan istisnai bir durum için özel durum hatası güvenmek ve geçersiz kullanıcı adı ve şifre demek farz ediyorsun. Diğer sorunlar (örneğin, ağ hatası, REKLAM bağlantısı hatası, bellek ayırma hatası, vb.) sonra mis-intrepreted kimlik doğrulama hatası gibi.

Yöntem 2. Bilgisi Win32 API

Others LogonUser() API işlevini kullanarak önerdi. Bu kulağa hoş geliyor, ama ne yazık ki arayan kullanıcı bazen bir izin genellikle işletim sisteminin kendisi için sadece belirli ihtiyaçları:

İşlem arama Bilgisi gerektirir SE_TCB_NAME ayrıcalık. Eğer arama işlemi bu yok ayrıcalık, Bilgisi ve başarısız Döndürür döndürür ERROR_PRİVİLEGE_NOT_HELD.

Bazı doğduğunda işlemi çağıran Bilgisi de olmalı SE_CHANGE_NOTİFY_NAME ayrıcalık ; başarısız Bilgisi yoksa, etkin ve Döndürür döndürür ERROR_ACCESS_DENIED. Bu ayrıcalıktır yerel sistem için gerekli hesabı ya da üye hesaplarını Yöneticiler grubunun. Tarafından varsayılan, SE_CHANGE_NOTİFY_NAME. tüm kullanıcılar için etkin, ama bazı yöneticiler için devre dışı bırakabilir herkes.

Bu dağıtıyor "İşletim sisteminin bir parçası olarak hareket ederler" ayrıcalık Microsoft knowledge base article puan olarak willy-nilly - yapmak istediğin bir şey değildir:

...işlem arıyor Bilgisi olan SE_TCB_NAME olmalı ayrıcalık (Kullanıcı Yöneticisi, bu "İşletim sisteminin parçası olarak hareket Sistem" doğru) em. Bu SE_TCB_NAME ayrıcalık çok güçlü ve böylece rasgele bir kullanıcı için sadece bırakılmamalı bir uygulamayı çalıştırmakbuna ihtiyacı var doğrulama kimlik bilgileri.

Ayrıca, LogonUser() bir ara boş bir parola belirtilmişse başarısız olur.


Etki alanı kimlik bilgileri kümesi doğrulamak için doğru yol nedir?


Benoluryönetilen kod aramak için, ama bu bir Windows genel bir soru. Müşterilerin sahip olduğu kabul edilebilir .NET Frame Work 2.0 yüklü.

CEVAP
29 Kasım 2008, CUMARTESİ


C# içinde .NET 3.5 System.DirectoryServices.AccountManagement kullanarak.

 bool valid = false;
 using (PrincipalContext context = new PrincipalContext(ContextType.Domain))
 {
     valid = context.ValidateCredentials( username, password );
 }

Bu, geçerli etki alanı karşı doğrular. Diğer seçenekler için parametreli PrincipalContext yapıcı bak.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • booba1234

    booba1234

    22 Temmuz 2006
  • Theodore Leaf

    Theodore Lea

    29 AĞUSTOS 2006
  • wafflepwn

    wafflepwn

    14 AĞUSTOS 2008