IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement Web avec .NET Discussion :

Webservice : C# Application web


Sujet :

Développement Web avec .NET

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 97
    Points : 47
    Points
    47
    Par défaut Webservice : C# Application web
    Bonjour,

    Je viens vers vous car je bloque sur la sécurisation d'un webservice.

    Contexte : je crée une appli web avec VS 2010 qui permet via un webservice de communiquer avec une application Windows. Je peux utiliser les méthodes publiées via la webservices et faire des opérations CRUD sans aucun problèmes. J'en suis à l'étape de sécurisation du webservice. C'est là que je bloque.

    J'ai cherché longuement sur la toile pour savoir comment bien sécuriser un webservice. Comme réponse, j'ai trouvé :

    - utilisation d'un soapheader dans lequel on passe le username et le password
    - génération d'un token
    - cryptage username et password via HTTPS SSL.

    En pratique, je ne vois pas très bien comment procéder et quelles sont les principales étapes.

    Tout d'abord je suppose que je peux utiliser le form d'authentification crée par défaut par VS2010. Voici comment je vois les choses mais à vous de me corriger.

    1) le user clique sur log in,
    2) le username et password sont sauvés dans le header (headersoap) ainsi qu'un token généré par GUID.
    3) Ces 3 infos sont sauvés en BDD.
    4) vérification si le user à le droit d'accéder aux méthodes du webservice
    5) affiche des infos demandés par le user.


    Mes questions :

    1) les étapes vous semblent-elles cohérentes ?
    2) Si je pars du principe que je stocke mes users dans une DB SQL , dois-je changer quelque chose dans le webconfig afin que le check du couple username, password se fasse au sein de ma DB sql et non au sein de la DB ASPNET.MDF généréee par VS 2010 ?
    3) dois-je mettre defaultcredentials à false dans mon code ?
    4) comment être sûr que mon username, password et token soient bien passés via le header soap ?

    Si vous pouviez me mettre sur la voie, ça m'aiderait beaucoup à y voir plus clair.
    Je reviendrait alors vers vous avec mes premières lignes de code.


    Tout grand merci.

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 97
    Points : 47
    Points
    47
    Par défaut
    Bon j'ai un peu avancé dans le code. J'essaie d'y aller pas à pas. Voici le contenu de mon webservice :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Services;
    using System.Web.Services.Protocols;
     
    namespace Test_00
    {
     
        [WebService(Namespace = "http://tempuri.org/")]
        [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
        [System.ComponentModel.ToolboxItem(false)]
        // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
        // [System.Web.Script.Services.ScriptService]
     
     
        public class AuthHeader : SoapHeader
        {
            public string Login { get; set; }
            public string Password { get; set; }
        }
     
        public class WebServiceTest : System.Web.Services.WebService
        {
     
            public AuthHeader SecuredHeader { get; set; }
            [WebMethod]
            [SoapHeader("SecuredHeader")]
     
            public string HelloWorld(String nom)
            {
                String response;
                if (this.SecuredHeader!=null && this.SecuredHeader.Login == "Toto" && this.SecuredHeader.Password == "TotoPassword")
                {
                    response = "Hello " + nom;
                }
                else
                {
                    response = "Authentification failed"; // Cas où l'utilisateur n'est pas authentifié
                }
                return response;
            }
        }
    }
    Mon problème c'est que je ne parviens pas à faire en sorte que ma méthode HelloWorld me renvoie autre chose que "Authentification failed". Ce qui est aussi bizarre c'est que lorsque j'utilise la méthode HelloWorld(), aucun paramètre ne m'est demandé alors que dans sa définition elle requiert un paramètre "nom".

    Pourriez-vous me donner quelques pistes ?

    Merci

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 97
    Points : 47
    Points
    47
    Par défaut
    Voici comment je procède pour tester la méthode HelloWorld() :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Data.SqlClient;
    using System.Data;
    using System.Configuration;
    using System.Web.Services;
    using System.Web.Services.Protocols;
     
    namespace Test_00
    {
        public partial class Edit : System.Web.UI.Page
        {
     
            protected void Page_Load(object sender, EventArgs e)
            {
     
                WebServiceTest WSTest = new WebServiceTest();
                WR_WebserviceTest.WebServiceTest WS = new WR_WebserviceTest.WebServiceTest();
     
                AuthHeader header = new AuthHeader();
                header.Login = "Toto";
                header.Password = "TotoPassword";
     
                LabelResultHelloWorld.Text= WSTest.HelloWorld("Tom");
     
     
     
            }
        }
    }
    Un petit coup de main ne serait pas de refus. Si vous avez besoin de plus d'infos, n'hésitez pas.

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2009
    Messages
    2 004
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2009
    Messages : 2 004
    Points : 5 423
    Points
    5 423
    Par défaut
    Bon je connais pas du tout, mais ne devrais tu pas rajouter? :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WSTest.AuthHeaderValue=header ;
    Bien sur je suppose aussi que tu as fait un refresh de ta référence de service?

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 97
    Points : 47
    Points
    47
    Par défaut
    Non étant donné que VS2010 ne me propose pas cette formulation.

    Pourtant lorsque je lance le webservice je vois bien les sections AuthHeader avec Login et Password.

    Je comprends pas trop là.

  6. #6
    Expert confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2009
    Messages
    2 004
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2009
    Messages : 2 004
    Points : 5 423
    Points
    5 423
    Par défaut
    Peut etre SecuredHeaderValue ?

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 97
    Points : 47
    Points
    47
    Par défaut
    Je pense que j'ai dû louper qqch mais je vois pas quoi. Ce que je vois c'est que je n'utilise pas WS dans mon code alors que je l'intancie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     WR_WebserviceTest.WebServiceTest WS = new WR_WebserviceTest.WebServiceTest();

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 97
    Points : 47
    Points
    47
    Par défaut
    En repassant sur le code, je viens de remarquer qu'en effet en ajoutant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WSTest.AuthHeaderValue=header ;
    le problème est réglé.

    Merci beaucoup.

  9. #9
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 76
    Points : 81
    Points
    81
    Par défaut
    Bonjour tout le monde, j'ai à peu prêt le même problème que toi.
    J'aimerai savoir d'ou vient le "AuthHeaderValue"
    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment faire des etats pour une application web ?
    Par ovh dans le forum Autres outils décisionnels
    Réponses: 6
    Dernier message: 06/07/2021, 04h25
  2. Réponses: 3
    Dernier message: 26/04/2010, 16h15
  3. Difference entre Application Web et Webservice
    Par pracede2005 dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 15/10/2007, 12h50
  4. Debuggage d'une application WEB-TOMCAT
    Par oziller dans le forum JBuilder
    Réponses: 3
    Dernier message: 08/02/2003, 00h10
  5. Réponses: 4
    Dernier message: 04/07/2002, 13h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo