8

Delphi'de RemObjects DataAbstract/SDK kullanan bir sunucumuz var. Sunucularımıza erişmelerine izin vermek için kullanıcıların kimliklerini doğrulamak için Windows kimlik doğrulamasını kullanmak istiyoruz.Windows kimlik doğrulaması kullanarak orta katmandaki bir kullanıcının nasıl kimlik doğrulaması yapılır

1) İstemci uygulaması sunucuya açık metin olarak, Windows kullanıcı adı ve parola gönderir:

Şu anda aşağıdakileri yapın. Tabii ki

function ValidateUserLogonAPI(const UserName: string; const Domain: string; 
    const PassWord: string) : boolean; 
var 
    Retvar: boolean; 
    LHandle: THandle; 
begin 
    Retvar := LogonUser(PWideChar(UserName), 
           PWideChar(Domain), 
           PWideChar(PassWord), 
           LOGON32_LOGON_NETWORK, 
           LOGON32_PROVIDER_DEFAULT, 
           LHandle); 

    if Retvar then 
    CloseHandle(LHandle); 

    Result := Retvar; 
end; 

bu yöntem, kullanıcının kimlik bilgileri düz metin olarak ağ üzerinden geçirilen bir dezavantajı vardır: 2) sunucusu aşağıdaki işlevi kullanarak kimlik bilgilerini denetler. Bunları şifreleyebilirdik, ancak şifreleme/şifre çözme anahtarlarının uygulama içinde gönderilmesi gerekecekti.

Amacımıza ulaşmanın daha iyi bir yolu olması gerektiğine eminim. Jetonlar hakkında biraz okudum, ama bu durumda nasıl çalışacaklarını gerçekten anlamıyorum.

Çözümün hem Delphi Windows istemcisi hem de Delphi Prism ASP.NET istemcisi için çalışması gerektiğini unutmayın.

Verebileceğiniz herhangi bir yardım için teşekkür ederiz.

+0

Kerberos tabanlı bir çözüm kullanmayı düşündünüz mü? Ağda çalışan bir Kerberos örneğini gerektirir, ancak güvenli olmayan bir ağ üzerinden fiili standart kimlik doğrulama protokollerinden biridir. http://en.wikipedia.org/wiki/Kerberos_%28protocol%29 – mjn

+0

Bir AD etki alanına sahipse, Kerberos'a sahip olsa da, Windows'un farklı kimlik doğrulama yöntemleriyle aynı arabirim ile çalışmasına izin veren bir mekanizma olmasına rağmen –

+0

Bu bir Intranet midir? (veya VPN) veya İnternet tabanlı uygulama? Intranet ve Kerberos için belki bu yardımcı olabilir: http://stackoverflow.com/questions/1052369/how-can-i-get-a-kerberos-ticket-with-delphi – mjn

cevap

2

Bu, DataAbstract'un kendisi ile başa çıkması gereken bir şeydir ve eğer Datasnap'in olduğu gibi yarım destekli bir kütüphane değilse :) Remoting geldiğinde, uç noktaların doğrulanması/yetkilendirilmesi ve veri alışverişinin korunması gerçekten kritiktir.

Temel olarak, kullanıcı kimlik bilgilerini göndermelisiniz, ancak hem istemci hem de sunucunun kimlik doğrulamanın nasıl yapılacağını bildiği bir "jeton" değiştirmelisiniz. Tam bir açıklama karmaşık olabilir. MSDN'den başlayabilirsiniz (AcceptSecurityContext() ve InitializeSecurityContext() için bakın). Bir olasılık sorunu DataAbastract, birden fazla gidiş-dönüş gerektirebilecek kimlik doğrulama aşamasını uygulamak için uygun kancalar varsa.

Bir durma ölçüsü olarak IPSec'i iletişim kanalını korumak için etkinleştirebilir ve tüm kullanıcı hesabının kolayca "kokla" olmasına izin veremezsiniz.

+0

DataAbstract mükemmel bir kütüphanedir, ancak kesinlikle zayıf noktaları güvenlik açık. Bu yüzden kendi kimlik doğrulama kodumuzu yazdık ki, kancalar bir sorun olmamalıydı :) Tekerleği yeniden icat etmek için zamanımız yok, bu yüzden Delphi'de bazı örnekler bulabilirsem iyi olurdu. – norgepaul

İlgili konular