2010-05-14 8 views
0

Je développe des services web.Dans ce que je veux maintenir des informations d'état de sorte que tous les WebMethods pourraient être l'accès seulement après la connexion. J'ai essayé mais j'ai eu des problèmes. Je joins mon code. Toute autre alternative sera également la bienvenue.effectuer l'autorisation/authentification entre les services Web


[

WebService (Namespace = "http://amSubfah.org/")]

[

WebServiceBinding (conformsTo = WsiProfiles.BasicProfile1_1)]

// Pour permettre à ce service Web pour être appelé à partir du script, en utilisant ASP.NET AJAX, décommentez la ligne suivante.

// [System.Web.Script.Services.ScriptService]

publique

classe Login: System.Web.Services.WebService {

message msgObj = nouveau message();

BaseClass b = nouveau BaseClass();

PasswordEncryptionDecryption pedObj = nouveau PasswordEncryptionDecryption(); Public AuthHeader Authentication = new AuthHeader();

public AuthHeader Authentification = new AuthHeader();

Connexion publique() {

// Décommentez la ligne suivante si vous utilisez des composants conçus

// InitializeComponent();

}

[

SoapHeader ("Authentification", requise = true)]

[System.Web.Services.

WebMethod (EnableSession = true)]

chaîne publique checkUserLogin (utilisateur string, string PWD)

{

DataSet dsLogin = new DataSet();

Liste sqlParams = new Liste();

SqlParameter sqlParam1 = nouveau SqlParameter ("@ UserName", SqlDbType.NVarChar);

sqlParam1.Value = utilisateur;

sqlParams.Ajouter (sqlParam1);

SqlParameter sqlParam2 = nouveau SqlParameter ("@ Password", SqlDbType.NVarChar);

chaîne pass = pedObj.encryptPassword (pwd);

sqlParam2.Value = passe;

sqlParams.Add (sqlParam2);

essayer

{

b.initializeDBConnection();

dsLogin = b.execSelectLoginQuery (

Query.strSelectLoginData, sqlParams);

}

catch (SqlException sqlEx)

{

chaîne

str = msgObj.msgErrorMessage + sqlEx.Message + sqlEx.StackTrace;

}

{if ((dsLogin! = Null) & & (dsLogin.Tables [0] .Rows.Count! = 0))

{

session [

"nom d'utilisateur"] = utilisateur;

chaîne sessionId = System.Guid.NewGuid(). ToString();

Authentication.sessionId = sessionId;

Authentication.Username = user;

return msgObj.msgLoginSuccess;

}

autre

retour msgObj .msgLoginFail;

}

// webmethod pour l'enregistrement

[

SoapHeader ("Authentification", requise = true)]

[Système .web .Services.

WebMethod (EnableSession = true)]

insertRegistrationDetails de chaîne publique (chaîne FNAME, chaîne lName, email string, string PWD)

{

// chaîne u = Session [ "nom d'utilisateur" ] .ToString();

// if (u == "")

// {

// // checkUserLogin (fName, PWD);

// return "Veuillez vous connecter d'abord";

//}

if (Authentication.Username == null || Authentication.sessionId == null)

{

retour "S'il vous plaît connecter";

}

Liste sqlParams = new List();

int insert = 0;

chaîne msg = "";

SqlParameter sqlParam = nouveau SqlParameter ("@ FName", SqlDbType.NVarChar);

sqlParam.Value = fName;

sqlParam.Size = 50;

sqlParams.Add (sqlParam);

SqlParameter sqlParam1 = nouveau SqlParameter ("@ LName", SqlDbType.NVarChar);

sqlParam1.Value = lName;

sqlParam1.Size = 50;

sqlParams.Add (sqlParam1);

SqlParameter sqlParam5 = new SqlParameter ("@ E-Mail", SqlDbType.NVarChar);

sqlParam5.Value = email;

sqlParam5.Size = 50;

sqlParams.Add (sqlParam5);

SqlParameter sqlParam7 = new SqlParameter ("@ Mot de passe", SqlDbType.NVarChar);

sqlParam7.Value = pedObj .encryptPassword (PWD);

sqlParam7.Size = 50;

sqlParams.Ajouter (sqlParam7);

essayer

{

b.initializeDBConnection();

insert = b.execByKeyParams (

Query.strInsertIntoRegistrationTable1, sqlParams);

if (insert = 0!)

{

msg = msgObj .msgRecInsertedSuccess;

}

}

catch (SqlException sqlEx)

{

chaîne

str = msgObj.msgErrorMessage + sqlEx.Message + sqlEx.StackTrace;

return msg;

}

public class AuthHeader: SoapHeader

{

chaîne publique Nom d'utilisateur;

chaîne publique sessionId;

}

}

Répondre

0

Vous avez EnableSession=true ensemble pour que vous faites partie du chemin. Chaque requête arrivant sur le webservice sera établie dans le cadre de la même session que l'utilisateur connecté. Votre code de connexion doit définir une sorte de valeur dans la session pour indiquer que l'utilisateur s'est connecté avec succès. Une approche consiste à ajouter du code à Global.asax (ou créer Global.asax si vous n'en avez pas) comme cela est exécuté à chaque demande. Dans là, vous pouvez valider que les valeurs sont enregistrées en session indiquant une connexion correcte.

Si l'utilisateur ne s'est pas connecté et essaie d'appeler le service Web, le code de global.asax verra que la valeur de connexion n'est pas enregistrée en session, et vous pouvez les rediriger vers la page de connexion .