MSDN : http://msdn.microsoft.com/en-kr/library/xdt4thhy.aspx
폼 인증 구현하기
[Web.config 설정]
1. Web.config 파일에 추가
2. authentication 요소 내에 forms 요소를 만들고 다음 특성을 설정한다.
loginUrl : ASP.NET이 요청에서 인증 쿠키를 찾기 못할 경우 리디렉션에 사용할 URL
defaultUrl : 인증 후 리디렉션 되는 URL
domain : 보내는 폼 인증 쿠키에 설정할 선택적 도메인 지정
(httpCookies 요소에 사용되는 도메인보다 우선)
name : 인증 타켓을 포함하는 쿠키의 이름에 사용할 접미사 설정
(기본값은 ".ASPXAUTH")
protection : 쿠키에 사용되는 암호화 유형을 지정
ALL - 데이터 유효성 검사 및 암호화를 모두 사용 하여 쿠키를 보호
Encryption - 개인 설정 정보를 제공할 경우에만 쿠키를 사용하고 보안 요구 사항이 낮은 사이트에
폼 인증 구현하기
[Web.config 설정]
1. Web.config 파일에 추가
<system.web>
<authentication mode="Forms"> </authentication>
</system.web>
<authentication mode="Forms"> </authentication>
</system.web>
2. authentication 요소 내에 forms 요소를 만들고 다음 특성을 설정한다.
loginUrl : ASP.NET이 요청에서 인증 쿠키를 찾기 못할 경우 리디렉션에 사용할 URL
defaultUrl : 인증 후 리디렉션 되는 URL
domain : 보내는 폼 인증 쿠키에 설정할 선택적 도메인 지정
(httpCookies 요소에 사용되는 도메인보다 우선)
name : 인증 타켓을 포함하는 쿠키의 이름에 사용할 접미사 설정
(기본값은 ".ASPXAUTH")
protection : 쿠키에 사용되는 암호화 유형을 지정
ALL - 데이터 유효성 검사 및 암호화를 모두 사용 하여 쿠키를 보호
Encryption - 개인 설정 정보를 제공할 경우에만 쿠키를 사용하고 보안 요구 사항이 낮은 사이트에
대해서는 암호화와 유효성 검사를 모두 해제하도록 지정
slidingExpiration : 상대 만료의 설정 여부를 지정.
상대 만료는 단일 세션 동안 각 요청에 대해 쿠키가 만료하도록 활성인증 시간을
다시 설정.
다시 설정.
timeout : 쿠키가 만료될 때까지의 시간(분)을 정수 단위로 지정합니다.
SlidingExpiration 특성이 true이면 timeout특성은 가변 값이 되며
마지막 요청을 받은 후 지정된 시간이 경과 하면 만료됩니다.
성능 저하를 방지하고 쿠키 경고가 설정된 사용자에게 여러 개의
브라우저 경고가 나타나지 않도록 하기 위해 지정된 시간에서 50%가
경과하면 쿠키가 업데이트 됩니다. 기본값은 30분 입니다.
마지막 요청을 받은 후 지정된 시간이 경과 하면 만료됩니다.
성능 저하를 방지하고 쿠키 경고가 설정된 사용자에게 여러 개의
브라우저 경고가 나타나지 않도록 하기 위해 지정된 시간에서 50%가
경과하면 쿠키가 업데이트 됩니다. 기본값은 30분 입니다.
<system.web>
<authentication mode="Forms">
<forms loginUrl="Logon.aspx" protection="Encryption" ></forms>
</authentication>
</system.web>
<authentication mode="Forms">
<forms loginUrl="Logon.aspx" protection="Encryption" ></forms>
</authentication>
</system.web>
3. authorization 요소 추가
<system.web>
<authentication mode="Forms">
<forms loginUrl="Logon.aspx" protection="Encryption" ></forms>
</authentication>
<authorization> </authorization>
</system.web>
<authentication mode="Forms">
<forms loginUrl="Logon.aspx" protection="Encryption" ></forms>
</authentication>
<authorization> </authorization>
</system.web>
4. authorization 요소 내에 deny요소를 만들고 users 특성을 "?" 로 설정합니다. 이렇게 하면 인증되지 않은 사용자("?"로 나타냄)가 이 응용 프로그램의 리소스에 액세스할 수 없도록 지정됩니다.
<system.web>
<authentication mode="Forms">
<forms loginUrl="logon.aspx" protection="Encryption" ></forms>
</authentication>
<authorization>
<deny users="?" />
</authorization>
</system.web>
<authentication mode="Forms">
<forms loginUrl="logon.aspx" protection="Encryption" ></forms>
</authentication>
<authorization>
<deny users="?" />
</authorization>
</system.web>
[로그온 페이지 만들기]
1. 위에서 설정한 loginUrl 페이지
<%@ Page Language="C#" %>
<%@ Import Namespace="System.Web.Security" %>
<script runat="server">
void Logon_Click(object sender, EventArgs e)
{
if ((UserEmail.Text == "jchen@contoso.com") &&
(UserPass.Text == "37Yj*99Ps"))
{
FormsAuthentication.RedirectFromLoginPage
(UserEmail.Text, Persist.Checked);
}
else
{
Msg.Text = "Invalid credentials. Please try again.";
}
}
</script>
<html>
<head id="Head1" runat="server">
<title>Forms Authentication - Login</title>
</head>
<body>
<form id="form1" runat="server">
<h3>
Logon Page</h3>
<table>
<tr>
<td>
E-mail address:</td>
<td>
<asp:TextBox ID="UserEmail" runat="server" /></td>
<td>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1"
ControlToValidate="UserEmail"
Display="Dynamic"
ErrorMessage="Cannot be empty."
runat="server" />
</td>
</tr>
<tr>
<td>
Password:</td>
<td>
<asp:TextBox ID="UserPass" TextMode="Password"
runat="server" />
</td>
<td>
<asp:RequiredFieldValidator ID="RequiredFieldValidator2"
ControlToValidate="UserPass"
ErrorMessage="Cannot be empty."
runat="server" />
</td>
</tr>
<tr>
<td>
Remember me?</td>
<td>
<asp:CheckBox ID="Persist" runat="server" /></td>
</tr>
</table>
<asp:Button ID="Submit1" OnClick="Logon_Click" Text="Log On"
runat="server" />
<p>
<asp:Label ID="Msg" ForeColor="red" runat="server" />
</p>
</form>
</body>
</html>
void Logon_Click(object sender, EventArgs e)
{
if ((UserEmail.Text == "jchen@contoso.com") &&
(UserPass.Text == "37Yj*99Ps"))
{
FormsAuthentication.RedirectFromLoginPage
(UserEmail.Text, Persist.Checked);
}
else
{
Msg.Text = "Invalid credentials. Please try again.";
}
}
</script>
<html>
<head id="Head1" runat="server">
<title>Forms Authentication - Login</title>
</head>
<body>
<form id="form1" runat="server">
<h3>
Logon Page</h3>
<table>
<tr>
<td>
E-mail address:</td>
<td>
<asp:TextBox ID="UserEmail" runat="server" /></td>
<td>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1"
ControlToValidate="UserEmail"
Display="Dynamic"
ErrorMessage="Cannot be empty."
runat="server" />
</td>
</tr>
<tr>
<td>
Password:</td>
<td>
<asp:TextBox ID="UserPass" TextMode="Password"
runat="server" />
</td>
<td>
<asp:RequiredFieldValidator ID="RequiredFieldValidator2"
ControlToValidate="UserPass"
ErrorMessage="Cannot be empty."
runat="server" />
</td>
</tr>
<tr>
<td>
Remember me?</td>
<td>
<asp:CheckBox ID="Persist" runat="server" /></td>
</tr>
</table>
<asp:Button ID="Submit1" OnClick="Logon_Click" Text="Log On"
runat="server" />
<p>
<asp:Label ID="Msg" ForeColor="red" runat="server" />
</p>
</form>
</body>
</html>
2. 인증되지 않은 사용자에 대한 Default 페이지
<%@ Page Language="C#" %>
<html>
<head>
<title>Forms Authentication - Default Page</title>
</head>
<html>
<head>
<title>Forms Authentication - Default Page</title>
</head>
<script runat="server">
void Page_Load(object sender, EventArgs e)
{
Welcome.Text = "Hello, " + Context.User.Identity.Name;
}
void Page_Load(object sender, EventArgs e)
{
Welcome.Text = "Hello, " + Context.User.Identity.Name;
}
void Signout_Click(object sender, EventArgs e)
{
FormsAuthentication.SignOut();
Response.Redirect("Logon.aspx");
}
</script>
{
FormsAuthentication.SignOut();
Response.Redirect("Logon.aspx");
}
</script>
<body>
<h3>
Using Forms Authentication</h3>
<asp:Label ID="Welcome" runat="server" />
<form id="Form1" runat="server">
<asp:Button ID="Submit1" OnClick="Signout_Click"
Text="Sign Out" runat="server" /><p>
</form>
</body>
</html>
<h3>
Using Forms Authentication</h3>
<asp:Label ID="Welcome" runat="server" />
<form id="Form1" runat="server">
<asp:Button ID="Submit1" OnClick="Signout_Click"
Text="Sign Out" runat="server" /><p>
</form>
</body>
</html>
페이지에 사용자의 인증된 ID가 표시됩니다. 이 ID는 FormsAuthentication 클래스를 통해 설정되고 ASP.NET 페이지에서 Context.User.Identity.Name 속성으로 사용할 수 있습니다. 로그아웃 단추의 Click 처리기에는 SignOut 메서드를 호출하여 사용자 ID를 지우고 인증 티켓(쿠키)을 제거하는 코드가 포함되어 있습니다. 그런 다음 사용자가 로그온 페이지로 리디렉션됩니다.
'Programming > ASP.NET' 카테고리의 다른 글
[스크랩] RegisterForEventValidation은 Render()를 실행하는 동안에만 호출 (0) | 2010.04.27 |
---|---|
팝업창 열기 (0) | 2010.04.27 |
GridView 숨겨진 필드 값 가져오기 (0) | 2010.04.21 |
페이지 이동시 주소 표시줄 고정시키기 (0) | 2010.04.15 |
JQuery를 사용한 MouseOver 시 Div 창 띄워주기. ^O^ (0) | 2010.04.13 |
비밀번호 해쉬 암호화 HashPasswordForStoringInConfigFile (0) | 2010.04.08 |
[스크랩] 프로젝트에 CKEditor, CKFinder 연동 방법 (0) | 2010.04.05 |
[스크랩] HttpCookie 클래스 사용 하기 (0) | 2010.04.05 |
[스크랩] 간단한 쿠키(Cookie) 예제 (0) | 2010.04.05 |
[스크랩] ASP.NET 개발자가 항상 수행해야 하는 작업 (0) | 2010.03.29 |