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?

È stato utile?

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:

  1. Leggi su sicurezza (iniziare con " noreferrer Segreti e bugie " e altri libri di questo genere generali prima di passare agli aspetti tecnici)

  2. 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 .

  3. Usa TLS (aka SSL).

  4. 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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top