Come saldamente Trasmissione dati a / da un servizio Web pubblico
-
26-09-2019 - |
Domanda
Un app sto lavorando su interfacce con un'applicazione esistente in esecuzione su una scatola a distanza. Comun con l'applicazione a distanza sono attraverso i suoi servizi Web pubblici. Mi è stato chiesto di costruire un miglioramento che coinvolgerà un uso client che effettua il servizio web per gestire i dati sensibili che dovranno essere trasmessi in modo sicuro.
Qualcuno mi potrebbe dare alcune indicazioni sul modo migliore di procedere?
Soluzione
Per iniziare, si dovrebbe utilizzare SSL e rifiutare qualsiasi richiesta che non lo si utilizza. Ciò crittografare i dati mentre viene trasmesso via Internet.
Se si sta usando SOAP, si potrebbe definire un header personalizzato nel vostro servizio che richiede un nome utente / password. Poi, per la prima linea di ogni metodo pubblico, convalidare il nome utente e la password di un database. In caso di successo, impostare il HttpContext.Current.User in modo appropriato, e il vostro servizio sarà legare bene con il costruito in infrastrutture Asp.NET.
AGGIUNTO:. Di seguito è riportato un SoapHeader esempio che include un nome utente / password per l'autenticazione
// 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
}
}
Ora, se si esegue lo strumento WSDL, la classe proxy generato includerà l'intestazione di autenticazione definito:
PublicWebService s = new PublicWebService();
s.Authentication = new AuthenticationHeader();
s.Authentication.UserName = "xxxxxxxx";
s.Authentication.Password = "yyyyyyyy";
s.PublicMethod1();
s.PublicMethod2();
Altri suggerimenti
percorso fai da te:
-
Leggi su sicurezza (iniziare con " noreferrer Segreti e bugie " e altri libri di questo genere generali prima di passare agli aspetti tecnici)
-
Eseguire un'analisi dei rischi e la valutazione thread. Capire che cosa si sta proteggendo e da quello, e dove le minacce verranno da. È improbabile che bisogno "alta sicurezza" 1 .
-
Usa TLS (aka SSL).
-
Nel client, verificare il certificato del server sia corretto.
Meglio percorso:. impiegare un esperto che ha una solida reputazione per aiutarvi a
1 A meno che davvero sta costruendo un impianto di armi nucleari o simili.