2011-04-25 5 views
1

J'ai hérité d'une application ASP.NET C# qui ne fonctionne pas totalement. On m'a dit d'utiliser l'authentification par formulaire pour empêcher les utilisateurs non autorisés d'accéder à certains sous-répertoires.ASP.NET C# - Configuration de la sécurité basée sur les rôles avec authentification par formulaires

J'ai un problème de compréhension de l'authentification par formulaire. Ceci est un site internet public et tous les utilisateurs auront accès à la partie principale du site. Cependant, il existe un sous-répertoire limité à certains utilisateurs. Je sais qu'un utilisateur est valide parce qu'il entrera un nom d'utilisateur et un mot de passe et je les rechercherai dans une base de données. J'ai ajouté ces lignes au fichier web.config du sous-répertoire.

<configuration> 
    <appSettings/> 
    <connectionStrings/> 
    <system.web> 
     <authorization> 
     <allow roles="Administrators, Examiners"/> 
      <deny users="*"/> 
     </authorization> 
    </system.web> 

La question est de savoir comment définir dans mon code que l'utilisateur appartient à un certain rôle.

Voici le pseudo-code.

Si le nom d'utilisateur et mot de passe puis correspondance

Définir ce rôle à des utilisateurs Examiners.

Je ne connais pas le code dont j'ai besoin pour attribuer un rôle à l'utilisateur.

Répondre

1

Jetez un coup d'œil à votre base de données d'adhésion.

Pour prendre un nouveau départ ici, vous allez avec la méthode de connexion:

protected void LoginButton_Click(object sender, EventArgs e) 
{ 
// Validate the user against the Membership framework user store 
if (Membership.ValidateUser(UserName.Text, Password.Text)) 
{ 
// Log the user into the site 
FormsAuthentication.RedirectFromLoginPage(UserName.Text, RememberMe.Checked); 
} 
// If we reach here, the user's credentials were invalid 
InvalidCredentialsMessage.Visible = true; 
} 

vous pouvez vérifier les informations d'identification utilisateur dans la méthode authenticate:

protected void myLogin_Authenticate(object sender, AuthenticateEventArgs e) 
{ 
// Get the email address entered 
TextBox EmailTextBox = myLogin.FindControl("Email") as TextBox; 
string email = EmailTextBox.Text.Trim(); 

// Verify that the username/password pair is valid 
if (Membership.ValidateUser(myLogin.UserName, myLogin.Password)) 
{ 
// Username/password are valid, check email 
MembershipUser usrInfo = Membership.GetUser(myLogin.UserName); 
if (usrInfo != null && string.Compare(usrInfo.Email, email, true) == 0) 
{ 
// Email matches, the credentials are valid 
e.Authenticated = true; 
} 
else 
{ 
// Email address is invalid... 
e.Authenticated = false; 
} 
} 
else 
{ 
// Username/password are not valid... 
e.Authenticated = false; 
} 
} 

Pour la redirection en fonction d'un rôle spécifique utiliser ce code:

protected void Login1_LoggedIn(object sender, EventArgs e) 
{ 
    if (Roles.IsUserInRole(Login1.UserName, "Admin")) 
    { 
     Response.Redirect("~/Admin/Default.aspx"); 
    } 
    else if (Roles.IsUserInRole(Login1.UserName, "Examiner")) 
    { 
     Response.Redirect("~/Examiner/Default.aspx"); 
    } 
    else 
    { 
     Response.Redirect("~/Login.aspx"); 
    } 
} 
+0

Ceci est utile. J'ai découvert que mon prédécesseur avait déjà créé les tables dont j'avais besoin. La configuration web est également configurée mais pas de code. J'ai été capable de changer le web.config pour pointer vers ma base de données locale. Puis l'appel que vous m'avez donné Membership.ValidateUser a fonctionné quand je lui ai donné un exemple d'utilisateur et de mot de passe. Le problème que j'ai est que les mots de passe que j'ai pour mes utilisateurs sont cryptés, donc je n'ai aucun moyen de savoir ce qu'il y avait. J'ai donc besoin de code pour créer un utilisateur et lui donner un mot de passe ou modifier le mot de passe d'un utilisateur existant pour que je puisse avoir un appel réussi. –

+0

Je trouve ce dont j'ai besoin. Alors que les autres réponses étaient aussi utiles, je vous considère comme la meilleure. –

+0

@ Bob, je suis content que cela a aidé. La validation des mots de passe est faite côté serveur et vous n'avez pas à vous en préoccuper. Vous pouvez cliquer sur le bouton Up-Vote pour toutes les réponses utiles sans accepter leurs réponses pour donner du crédit à tout le monde. –

0

Tout ce que vous devez savoir à propos de l'authentification par formulaire est abordé dans cette section asp.net security tutorial series. C'est très basique et étape par étape alors j'espère que vous n'aurez aucun problème à le suivre.

0

Vous devrez implémenter un fournisseur d'appartenance et de rôle qui fonctionne avec votre base de données. Le fournisseur d'appartenances authentifiera l'utilisateur et déterminera quel utilisateur est connecté. Le fournisseur de rôle déterminera les autorisations dont dispose l'utilisateur.

Il semble que vous abordiez le problème dans la mauvaise direction en ce qui concerne l'appartenance .NET et les fournisseurs de rôles. Au lieu de vous authentifier vos utilisateurs puis de dire aux membres et à la bibliothèque de rôles de Microsoft qui est connecté et quelles autorisations ils ont, le framework .NET authentifiera vos utilisateurs en utilisant un fournisseur d'appartenances, et le framework indiquera à votre application les permissions d'un utilisateur. a en utilisant le fournisseur de rôle. Vous allez essentiellement construire des plugins pour les membres et les fournisseurs de rôles. Voir pour plus d'informations sur l'implémentation d'un fournisseur d'appartenance et here pour des informations similaires sur l'implémentation d'un fournisseur de rôle.

Questions connexes