0 votes

l'autorisation/authentification entre les services web

Je développe des webservices, dans lesquels je souhaite conserver des informations d'état afin que toutes les méthodes Web ne soient accessibles qu'après la connexion. J'ai essayé mais j'ai rencontré un problème. Je joins mon code. Toute autre alternative sera la bienvenue.


[

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

[

WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]

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

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

public

class Login : System.Web.Services.WebService {

Message msgObj = nouveau Message() ;

Classe de base b = nouvelle Classe de base() ;

PasswordEncryptionDecryption pedObj = new PasswordEncryptionDecryption() ;

public AuthHeader Authentication=new AuthHeader () ;

public Login () {

//Décommenter la ligne suivante si l'on utilise des composants conçus à l'avance

//InitializeComponent() ;

}

[

SoapHeader("Authentication", Required = true)]

[System.Web.Services.

WebMethod(EnableSession = true)]

public string checkUserLogin(string user, string pwd)

{

DataSet dsLogin = new DataSet() ;

Liste sqlParams = nouvelle Liste() ;

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

sqlParam1.Value = user ;

sqlParams.Add(sqlParam1) ;

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

string pass = pedObj.encryptPassword(pwd) ;

sqlParam2.Value = pass ;

sqlParams.Add(sqlParam2) ;

essayer

{

b.initializeDBConnection() ;

dsLogin = b.execSelectLoginQuery(

Query.strSelectLoginData, sqlParams) ;

}

catch (SqlException sqlEx)

{

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

}

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

{

Session[

"nom d'utilisateur"] = utilisateur ;

string sessionId = System.Guid.NewGuid().ToString() ;

Authentication.sessionId = sessionId ;

Authentication.Username = user ;

return msgObj.msgLoginSuccess ;

}

autre

return msgObj .msgLoginFail ;

}

//webmethod pour l'enregistrement

[

SoapHeader("Authentication", Required = true)]

[Système .Web .Services .

WebMethod (EnableSession =true )]

public string insertRegistrationDetails(string fName,string lName,string email,string pwd)

{

//string u = Session["username"].ToString() ;

//si (u == "")

//{

// // vérifierUserLogin(fName,pwd ) ;

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

//}

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

{

return "Veuillez d'abord vous connecter" ;

}

Liste sqlParams = nouvelle Liste() ;

int insert = 0 ;

string msg = "" ;

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

sqlParam.Value = fName ;

sqlParam.Size = 50 ;

sqlParams.Add(sqlParam) ;

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

sqlParam1.Value = lName ;

sqlParam1.Size = 50 ;

sqlParams.Add(sqlParam1) ;

SqlParameter sqlParam5 = new SqlParameter("@Email", SqlDbType.NVarChar) ;

sqlParam5.Value = email ;

sqlParam5.Size = 50 ;

sqlParams.Add(sqlParam5) ;

SqlParameter sqlParam7 = new SqlParameter("@Password", SqlDbType.NVarChar) ;

sqlParam7.Value = pedObj .encryptPassword (pwd) ;

sqlParam7.Size = 50 ;

sqlParams.Add(sqlParam7) ;

essayer

{

b.initializeDBConnection() ;

insert = b.execByKeyParams(

Query.strInsertIntoRegistrationTable1, sqlParams) ;

si (insert !=0)

{

msg = msgObj .msgRecInsertedSuccess ;

}

}

catch (SqlException sqlEx)

{

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

}

return msg ;

}

public class AuthHeader : SoapHeader

{

public string Username ;

public string sessionId ;

}

}

0voto

Mike Ohlsen Points 1374

Vous avez EnableSession=true Vous avez donc déjà parcouru une partie du chemin. Chaque requête entrant dans le webservice sera établie comme faisant partie de la même session que l'utilisateur connecté.

Votre code de connexion doit définir une 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), qui est exécuté à chaque requête. Vous pouvez y valider que les valeurs sont sauvegardées dans la session, ce qui indique que l'utilisateur s'est bien connecté.

Si l'utilisateur n'est pas connecté et qu'il essaie d'appeler le webservice, le code dans global.asax verra que la valeur connectée n'est pas sauvegardée dans la session, et vous pourrez le rediriger vers la page de connexion.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X