2010-11-18 20 views
2

Bir uygulama, uzak bir kutuda çalışan mevcut bir uygulama ile arayüzler üzerinde çalışıyorum. Uzaktan uygulama ile Communicaitons kendi kamu web hizmetleri aracılığıyla. Ben güvenli bir şekilde iletilmesi gereken hassas verileri işlemek için bir web hizmeti kullanan bir müşteri içeren bir geliştirme yapmak için istendi.Genel Web Hizmetine/Verilerin Güvenli Bir Şekilde Nasıl Aktarılması

Bana en iyi şekilde nasıl ilerleyeceğine dair bazı işaretçiler verebilir misiniz?

+2

web hizmeti SOAP ne tür? WCF? Taşımacılık güvenliğine veya kimlik doğrulamasına ihtiyacınız var mı? –

+0

@Dirk - Ben onun bir SOAPY olduğuna inanıyorum. Sanırım sadece ulaşım güvenliğine ihtiyacım var, hizmetlerin hepsi herkese açık. – 5arx

cevap

4

Başlamak için, SSL kullanmalı ve kullanmayan tüm istekleri reddetmelisiniz. Bu, verileri İnternet üzerinden iletilmek üzere şifreler.

SOAP kullanıyorsanız, hizmetinizde kullanıcı adı/parola alan bir özel başlık tanımlayabilirsiniz. Daha sonra, her bir kamu yönteminde ilk satır için, bir veritabanına karşı kullanıcı adı ve şifreyi doğrulayın. Başarılı olursa, HttpContext.Current.User öğesini uygun şekilde ayarlayın ve hizmetiniz yerleşik Asp.NET altyapısıyla güzelce bağlanacaktır.

ADDED: Aşağıda, kimlik doğrulama için kullanıcı adı/parola içeren bir SoapHeader örneği verilmiştir. Eğer wsdl aracı çalıştırırsanız

// define the header 
public class AuthenticationHeader : SoapHeader 
{ 
    public String UserName { get; set; } 
    public String Password { get; set; } 
} 

// your service 
public class PublicWebService : WebService 
{ 
    // defines an instance of the header as part of the service 
    public AuthenticationHeader Authentication; 

    private void Authenticate() 
    { 
     // validate the username/password against a database 
     // set the HttpContext.Current.User if successful. 
     // Maybe throw a SoapException() if authentication fails 
    } 

    // Notice the SoapHeader("Authentication") attribute... 
    // This tells ASP.Net to look for the incoming header for this method... 
    [WebMethod] 
    [SoapHeader("Authentication")] 
    public void PublicMethod1() 
    { 
     Authenticate(); 

     // your code goes here 
    } 

    // Expose another method with the same authentication mechanism 
    [WebMethod] 
    [SoapHeader("Authentication")] 
    public void PublicMethod2() 
    { 
     Authenticate(); 

     // your code goes here 
    } 
} 

Şimdi, oluşturulan proxy sınıfı tanımlanmış kimlik doğrulama başlığını içerecektir:

PublicWebService s = new PublicWebService(); 
s.Authentication = new AuthenticationHeader(); 
s.Authentication.UserName = "xxxxxxxx"; 
s.Authentication.Password = "yyyyyyyy"; 
s.PublicMethod1(); 
s.PublicMethod2(); 
+0

Sanırım öneri ile tekrar gideceğim: özel başlıklar - bağlantı kurabilir misiniz Bir yürüyüş lütfen? – 5arx

+1

@ 5arx - Hizmetinize özel bir SOAP Üstbilgisi eklemek için bazı örnek kod ekledim. Herhangi bir sorunuz olursa haberim olsun. – dana

-1

DIY rota:

güvenlik kadar okuyun
  1. (technicalities geçmeden önce "Secrets and Lies" ve diğer bu tür genel kitaplar ile başlayın)

  2. bir risk analizi ve iplik değerlendirmesini yapın. Neyi koruduğunuzu, nelerin, tehditlerin nereden geleceğini öğrenin. "Yüksek Güvenlik" 'a ihtiyacınız yoktur.

  3. TLS (aka SSL) kullanın.

  4. İstemcide, sunucunun sertifikasının doğruluğundan emin olun.

Daha iyi rota: istihdam size yardımcı olacak sağlam bir üne sahip bir uzman.

Eğer gerçekten bir nükleer silah fabrikası inşa veya benzeri sürece

.

+0

3 ve 3'ten ayrı olarak biliyorsunuz. Yanıtınız çok yararlı değildi. Ben bir jobbing geliştirici - nispeten küçük bir özelliği uygulamadan önce bütün bir kitap okumak için zamanım yok ;-) – 5arx

+0

@ 5arx adımları 1 & 2 doğru adımları 3 ve 4 yapmakla ilgili (ve neden * neden * Onları sağ olsun). Dipnot, aşırı güvenlik ile tepenin üzerinden geçmeyecek.Adım 1 anahtardır, çünkü taşımacılık katmanı güvenlik altına almak çok fazla net güvenlik sağlamayacaktır (ulaşımdaki verilerin yakalanması önemli bir tehdit oluşturmayacaktır): eğer sunucu kendiliğinden güvende değilse, örneğin, dahili personel Kullanıcılarınızın korunmayı beklediği verileri koruyamadı. * Güvenli görünmek için minimum çabaya bakıyorsanız, lütfen uygulama adınızı söyleyin, böylece bunu önleyebilirim. * – Richard

+0

Yardım edemedim ama ÖK gibi sitelerle ilgili tavsiyelerin eksik olduğunu düşünüyorum. diğer geliştiricilerin özel soruları hakkında. Buradaki çoğumuzun, ideal bir dünyada muhtemelen konu etrafında kapsamlı bir şekilde okumamız gerektiğini veya daha da iyisi, alanında uzman bir danışmanla binlerce kişinin dışına çıkacağını anlayabilmek için yeterli zekaya sahip olduğumuzu tahmin ediyorum. Ancak burada gerçek dünyada, son teslim tarihleri ​​hakkında çığlık atan müşterilerimiz var; 'Bu konuda bir kitap okuyun' ya da 'cevap için Googling' gibi tavsiyem sadece yıkamıyorum ;-) – 5arx

İlgili konular