Tocmai am lucrat la un proof-of-concept pentru un proiect care va incepe in curand. A trebuit sa gasesc o modalitate de a securizeza o serie de servicii web ce vor fi apelate dintr-o interfata creata in Flash...
Deasemenea, unul dintre obiective era ca securitatea sa fie implementata folosind un provider .NET standard (am ales SQL ASP.NET Membership / Role Provider), pentru a ma putea folosi de atributul de securitate PrincipalPermission.
[WebMethod]
[PrincipalPermission(SecurityAction.Demand, Role="Administrators")]
public string HelloWorld()
{
return "Hello World ";
}
Setarea si configurarea acestor provideri se face ca si la o aplicatie web ASP.NET 3.5 standard, folosind tagurile din web.config pentru membership, role si connectionstrings.
Diferenta majora care apare in partea de autentificare si autorizare dintre o aplicatie standard ASP.NET 3.5 si un serviciu web ASP.NET este urmatoarea: in cadrul unei aplicatii ASP.NET, controlul standard de login se ocupa, pe langa partea de validare a utilizatorului, si de "popularea" proprietatii System.Threading.Thread.CurrentPrincipal cu obiectul care tine toate datele referitoare la utilizatorului curent (IPrincipal), pe cand intr-un serviciu web, toate aceste lucruri trebuie facute manual.
In cadrul unui serviciu web ASP.NET, cei doi pasi se fac in felul urmator:
Membership.ValidateUser(userName, password) pentru verificarea unui utilizator si
FormsAuthentication.SetAuthCookie(userName, true) pentru a spune .NET-ului ca de acum inainte sa adauge la toate raspunsurile de servicii web si o noua valoare criptata (nu este un session id).
Exemplu de metoda de autentificare in cadrul unui serviciu web
[WebMethod]
public bool AuthenticateUser(string userName, string password)
{
if (Membership.ValidateUser(userName, password))
{
FormsAuthentication.SetAuthCookie(userName, true);
return true;
}
else return false;
}
Next: cum se poate folosi Session intr-un serviciu web...
vineri, 15 august 2008
Abonaţi-vă la:
Postare comentarii (Atom)
0 comentarii:
Trimiteţi un comentariu