Question

Une application je travaille sur les interfaces avec une application existante en cours d'exécution sur une boîte à distance. Communicat avec l'application à distance sont via ses services web publics. On m'a demandé de construire une amélioration qui implique une utilisation de la prise de client du service Web pour traiter les données sensibles qui doivent être transmis en toute sécurité.

Quelqu'un pourrait-il me donner quelques conseils sur la meilleure façon de procéder?

Était-ce utile?

La solution

Pour commencer, vous devez utiliser SSL et de rejeter toute demande qui ne l'utilisent pas. Cela crypter les données est transmis sur Internet.

Si vous utilisez SOAP, vous pouvez définir un en-tête personnalisé dans votre service qui prend un nom d'utilisateur / mot de passe. Puis, pour la première ligne de chaque méthode publique, valider le nom d'utilisateur et mot de passe contre une base de données. En cas de succès, définissez le HttpContext.Current.User correctement, et votre service cadrerait parfaitement avec la construction dans les infrastructures Asp.NET.

AJOUTEE:. Ci-dessous un SoapHeader échantillon qui comprend un nom d'utilisateur / mot de passe pour l'authentification

// 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
    }
}

Maintenant, si vous exécutez l'outil wsdl, la classe proxy généré comprendra l'en-tête d'authentification définie:

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

Autres conseils

itinéraire DIY:

  1. Lire sur la sécurité (en commençant par " noreferrer Secrets et mensonges » et d'autres livres généraux avant de passer aux aspects techniques)

  2. Effectuer une analyse des risques et l'évaluation du fil. Comprendre ce que vous protégez et de quoi, et où les menaces viendront. Il est peu probable d'avoir besoin "Haute sécurité" 1 .

  3. TLS (alias SSL).

  4. Dans le client, vérifier le certificat du serveur est correct.

meilleur itinéraire. employer un expert qui a une réputation bien établie pour vous aider


1 Sauf si vous êtes vraiment construire une arme nucléaire plante ou similaire.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top