2011-04-25 8 views
1

전적으로 작동하지 않는 ASP.NET C# 응용 프로그램을 상속 받았습니다. 필자는 승인받지 않은 사용자가 특정 하위 디렉터리에 액세스하지 못하도록 폼 인증을 사용하라는 지시를 받았습니다.ASP.NET C# - 폼 인증을 사용하여 역할 기반 보안 설정

양식 인증을 이해하는 데 문제가 있습니다. 이것은 공용 인터넷 사이트이며 모든 사용자는 사이트의 주요 부분에 액세스 할 수 있습니다. 그러나 특정 사용자로 제한되는 하위 디렉토리가 있습니다. 사용자 이름과 암호를 입력하고 데이터베이스에서 찾아 볼 것이므로 사용자가 유효하다는 것을 알고 있습니다. 이 줄을 하위 디렉토리의 web.config 파일에 추가했습니다.

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

질문은 사용자가 특정 역할에 속한다고 어떻게 설정해야합니까?

여기에 의사 코드가 있습니다.

심사관에 대한 사용자 이름과 암호가 일치 다음

설정이 사용자의 역할을합니다.

사용자를 역할로 설정하는 데 필요한 코드를 모르겠습니다.

답변

1

회원 데이터베이스를 살펴보십시오.

는 로그인 방법으로 이동 여기에 시작을 만들려면 :

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; 
} 
당신을 인증 방법에서 사용자 자격 증명을 확인할 수 있습니다

: 재 지정에

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; 
} 
} 

가 특정 역할에 따라 이 코드를 사용하십시오 :

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

이것은 도움이됩니다. 내 전임자가 이미 필요한 테이블을 만들었다는 것을 알았습니다. 웹 설정도 설정되었지만 코드는 설정되지 않았습니다. 내 로컬 데이터베이스를 가리 키도록 web.config를 변경할 수있었습니다. 그런 다음 Membership.ValidateUser에게 샘플 사용자와 비밀번호를 제공 할 때 전화를 받았습니다. 내가 가지고있는 문제는 내가 가지고있는 암호를 알고 있으므로 암호가 무엇인지 알 길이 없기 때문입니다. 따라서 사용자를 생성하고 암호를 제공하거나 기존 사용자의 암호를 수정하는 코드가 필요하므로 전화를받을 수 있습니다. –

+0

내가 필요한 것을 알아 낸다. 다른 답변도 나약했지만, 나는 당신을 최고의 사람으로 표시했습니다. –

+0

@ Bob,이게 기쁘다. 암호 유효성 검사는 서버 측에서 수행되므로 걱정할 필요가 없습니다. 모든 투표에 도움을주기 위해 답변을 수락하지 않고 모든 유용한 답변에 대해 투표 버튼을 클릭 할 수 있습니다. –

0

폼 인증에 대해 알아야 할 모든 내용은 asp.net security tutorial series에서 다룹니다. 그것은 매우 기본적이고 단계적이므로 당신이 그것을 따르는 데 아무런 문제가 없기를 바랍니다.

0

데이터베이스와 작동하는 멤버십 및 역할 공급자를 구현해야합니다. 멤버 자격 공급자는 사용자를 인증하고 로그인 한 사용자를 추적합니다. 역할 공급자는 사용자의 권한을 결정합니다.

. NET 회원 및 역할 제공 업체가 잘못된 방향에서 문제가 발생하는 것처럼 들립니다. 사용자를 인증 한 다음 로그인 한 Microsoft의 멤버십 및 역할 라이브러리와 권한에 대해 알려주는 대신 .NET Framework는 멤버 자격 공급자를 사용하여 사용자를 인증하며 프레임 워크는 응용 프로그램에 사용자에게 사용 권한을 알려줍니다 역할 공급자를 사용합니다. 기본적으로 회원 및 역할 공급자를위한 플러그인을 빌드합니다.

멤버 자격 공급자 구현에 대한 자세한 내용은 here을 참조하고 역할 공급자 구현에 대한 자세한 내용은 here을 참조하십시오.

관련 문제