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

Services Web Java Discussion :

CookieContainer et Authentification par formulaire dans un WebService Options


Sujet :

Services Web Java

  1. #1
    Futur Membre du Club
    Inscrit en
    Janvier 2007
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 9
    Points : 7
    Points
    7
    Par défaut CookieContainer et Authentification par formulaire dans un WebService Options
    Bonjour,

    J'ai créé un WebService sur lequel on peut s'authentifier en utilisant
    le mode formulaire. J'ai développé deux applications clientes de ce
    Webservice.
    Une application ASP.NET et une application console.
    Pour maintenir une session entre mon WebService et mon client, je dois
    sauvegarder le cookie d'authentification (créé par mon WebService).
    Je ne comprends pas comment implémenter ce mécanisme !


    J'ai bien rajouté une instance de la classe CookieContainer à mon
    Proxy:
    MaClasseProxy myProxy = new MaClasseProxy ()
    myProxy.CookieContainer=new CookieContainer();


    Dois je ensuite mettre en session le cookie de d'authentification ? ou
    le framework le fait déjà?


    Les test que j'ai fait ne sont pas très concluant !


    De plus je me demande si tous les clients (PHP, Java....) pourront
    consommer ce service Web avec cette méthode d'authentification.


    D'avance merci pour votre aide,
    Hervé.

  2. #2
    Membre régulier
    Inscrit en
    Mai 2006
    Messages
    210
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 210
    Points : 103
    Points
    103
    Par défaut
    Salut, as tu trouvé quelque chose ?

    Car je cherche une solution simple et interoperable pour faire de l'authentification sur mes WS.

  3. #3
    Candidat au Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 2
    Points : 3
    Points
    3
    Par défaut Conserver une Session Web en WinForm
    Bonjour,

    J'ai beaucoup cherché pour trouver une solution. Alors maintenant que ça fonctionne, je publie des infos sur la solution pour que les suivants ne galèrent pas trop !

    Situation :
    J'ai créé des services web. Ils sont consommés par une application web et par une autre application cliente en WinForm.

    Tout fonctionne correctement avec l'application Web. En revanche, avec l'application WinForm, l'Id de Session était recréé à chaque appel d'un service de mon web service. Ce qui était genant pour suivre les clients connectés !

    SOLUTION :
    Première étape : Dans le service Web, il faut, pour chaque methode exposée, écrire :
    [WebMethod(EnableSession = true)]
    juste avant la méthode. Et je le répete : Pour chaque méthode exposée.

    Nous disposons de Session.SessionID qui est l'id de session et qui pourra être passé au proxy.

    Deuxième étape : Au niveau du client.
    Il suffit d'instancier le web service et tout fonctionne... pour les clients web !
    Pour que la session soit conservée pour les clients windows, il suffit, juste après l'instanciation du web service, d'instancier la classe CookieContainer :
    monWebService.CokkieContainer = new System.Net.CookieContainer();

    Voilà ! Donc, rvux69 avait tout bon. Je ne comprends pas ce qui n'allait pas pour lui... peut être juste le "(EnableSession = true)" qui manquait ?

    Extrait de code :
    Coté WebService

    namespace monWebService
    {
    /// <summary>
    /// Description résumée de Service1
    /// </summary>
    // [WebService(Namespace = "http://tempuri.org/")]
    [WebService(Namespace = "http://action.mc")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [ToolboxItem(false)]
    // Pour autoriser l'appel de ce service Web depuis un script à l'aide d'ASP.NET AJAX, supprimez les marques de commentaire de la ligne suivante.
    // [System.Web.Script.Services.ScriptService]

    public class WebServ : System.Web.Services.WebService
    {
    // CldataWS est une classe d'acces à ma base de données
    private monProxy.CldataWS Cx;

    public WebServBill()
    {
    // Connexion à ma base de données
    Cx = new monProxy.CldataWS();
    }

    [WebMethod(EnableSession = true)]
    public String Connect()
    {
    // Cette méthode ne fait que passer l'Id de session à mon proxy (Cx)
    // Ici, le seul point à noter est le passage de Session.SessionID

    Cx.Connect(Session.SessionID.ToString());

    return Session.SessionID.ToString()
    }
    }
    }

    Coté Client

    namespace monClient
    {

    public partial class Base : Form
    {


    public WebServicesClient.WebServ WS;

    // Constructeur de mon client
    public Base()
    {
    // Instanciation du Web Service et de la session
    WS = new WebServicesClient.WebServ();
    // Instanciation de la classe CookieContainer
    WS.CookieContainer = new System.Net.CookieContainer();

    InitializeComponent();
    }

    private void button4_Click(object sender, EventArgs e)
    {
    // Appel de la méthode Connect de mon WebServices
    // Si tout est ok, le meme ID de session sera retourné à chaque
    // appel tant que l'application n'est pas fermée.
    String TestIdSession;

    TestIdSession = WS.Connect();

    }
    }
    }

    Pour info, coté proxy

    namespace monProxy
    {
    public class CldataWS
    {
    private System.IO.StreamReader SR;
    private String ChaineConnexion;
    private System.Data.SqlClient.SqlConnection CNX;
    private System.Data.SqlClient.SqlCommand CMD;
    private System.Data.SqlClient.SqlDataAdapter DA;
    private System.Data.SqlClient.SqlDataReader DR;
    private System.Data.DataSet DS;
    private string Rq_Sql;

    //Constructeur
    // Cette méthode accede a la base de données
    public CldataWS()
    {

    // Lecture de la chaine de connexion à la base de données
    // La chaine de connexion est dans un fichier texte : connexion.txt
    this.SR = new System.IO.StreamReader(@"C:\Philippe\SourcesCS\connexion.txt");
    // Connexion à la base de données
    this.ChaineConnexion = this.SR.ReadLine().ToString();
    this.CNX = new System.Data.SqlClient.SqlConnection(ChaineConnexion);

    // Fermeture du Stream Reader qui ne servait qu'a lire le fichier texte contenant la chaine de connexion à la base
    this.SR.Close();
    this.CMD = new System.Data.SqlClient.SqlCommand();
    this.CMD.CommandType = System.Data.CommandType.Text;
    this.CMD.Connection = this.CNX;
    this.DA = new System.Data.SqlClient.SqlDataAdapter();
    this.DA.SelectCommand = this.CMD;
    this.DS = new System.Data.DataSet();
    }


    public int Connect(String _SessionId, String _Test)
    {
    int resultat = 0;

    this.DS.Clear();
    // Execution d'une procédure stockée qui va ajouter la session dans une table
    this.Rq_Sql = "EXECUTE INSERT_SESSION '" + _SessionId +"''";
    this.CMD.CommandText = this.Rq_Sql;
    resultat = this.DA.Fill(this.DS);

    return resultat;
    }
    }
    }


    N'hésitez pas à me contacter. Je n'ai pas une grande expérience, mais si je peux partager...

    Philippe

Discussions similaires

  1. Authentification par formulaire
    Par IcedLand dans le forum ASP.NET
    Réponses: 17
    Dernier message: 20/07/2009, 15h38
  2. authentification par formulaire dans SharePoint
    Par silifana dans le forum SharePoint
    Réponses: 8
    Dernier message: 17/03/2009, 17h01
  3. Réponses: 2
    Dernier message: 24/02/2009, 15h20
  4. Réponses: 7
    Dernier message: 22/08/2007, 09h43
  5. [1.1] Authentification par formulaire
    Par kakek dans le forum ASP.NET
    Réponses: 2
    Dernier message: 30/05/2005, 09h37

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