본문 바로가기

   
Programming/ASP.NET(4.0)

ASP.NET 인증 Window인증, Forms 인증, Passport인증

반응형

ASP.NET 인증 Window인증, Forms 인증, Passport인증

 - 모드 3가지

1. Windows 인증
 - OS의 계정을 사이트의 계정으로 사용
 - 대부분의인증 처리를 OS가 담당
 - 가장 손쉽게 구현
 - 내부 네트워크(사내 사이트, 소규모)
 - ASP.NET 기본인증

2. Forms 인증 **(대부분 이거를 많이 사용한다.)
 - 가장 대중화된 방법
 - 인증에 관련된 작업을 직접 구현(아이디+암호 = 로그인)
 - 계정을 별도로 관리(데이타베이스)

3. Passport 인증
 - 통합 인증
 - 연합을 맺은 사이트 중 한군데서 로그인을 해도 나머지 사이트 효력..






회원 사이트 구현
 -> 사이트 입장(방문)
 1. 회원
 2. 비회원

-> 프로그램 관점

 1. 로그인을 한사람
 2. 로그인을 하지 못한 사람

로그인(Login)

 - 인증을 받기 위한 행동
 - 인증받지 못한 유저 -> 인증받은 유저 : 회원

로그아웃(Logout)

 - 인증을 해지하기 위한 행동
 - 인증받은 유저 -> 인증받지 못한 유저(회원? or 비회원?)



ASP.NET 보안(인증) 구현

 1. Authehication(인증)
    - 로그인 or 로그아웃

 2. Authorization(허가)
    - 유저가 특정 행동을 할 수 있는지 확인!!
    - 권한





로그인

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Login.aspx.cs" Inherits="Login" %>

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

 

<html xmlns="http://www.w3.org/1999/xhtml">

<head runat="server">

    <title></title>

</head>

<body>

    <form id="form1" runat="server">

    <div>

   

       <h2>

                    Login.aspx</h2>

             <h2>

                    <br />

                    아이디 :

                    <asp:TextBox ID="TextBoxID" runat="server" Width="100px"></asp:TextBox>

                    <br />

                    <br />

                    암호&nbsp;&nbsp; :

                    <asp:TextBox ID="TextBoxPwd" runat="server" Width="100px"></asp:TextBox>

                    <br />

                    <br />

                    <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="로그인"

                           Width="100px" />

                    <br />

             </h2>

             <br />

   

    </div>

    </form>

</body>

</html>

 

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Data;

using System.Data.SqlClient;

using System.Configuration;//연결 문자열

using System.Web.Security;//인증

 

public partial class Login : System.Web.UI.Page

{

    protected void Page_Load(object sender, EventArgs e)

    {

 

    }

       protected void Button1_Click(object sender, EventArgs e)

       {

             //인증

             // - DB에 등록된 ID & Pwd 올바르게 기입?

             // -> 인증 쿠키 발급

 

             SqlConnection con = new SqlConnection();

             con.ConnectionString = ConfigurationManager.ConnectionStrings["ASPNETConnectionString"].ConnectionString;//web.config

 

             SqlCommand cmd = new SqlCommand();

             cmd.Connection = con;

             cmd.CommandText = string.Format("select count(*) from tblMember where id='{0}' and pwd='{1}'", TextBoxID.Text.Trim(), TextBoxPwd.Text.Trim());//?

 

             con.Open();

             int result = (int)cmd.ExecuteScalar();

            

 

             if (result == 1)

             {

                    //로그인 성공!!

                    // -> 표식(인증) -> 쿠키 발급

                    //Response.Cookies["_Auth"].Value = "hong";

                    FormsAuthentication.SetAuthCookie(TextBoxID.Text.Trim(), false);

 

                    //추가 정보 가져오기

                    cmd.CommandText = string.Format("select name, lv from tblMember where id='{0}'", TextBoxID.Text.Trim());

 

                    SqlDataReader reader = cmd.ExecuteReader();

                    if (reader.Read())

                    {

                           Response.Cookies["lv"].Value = reader["lv"].ToString();

                           Response.Cookies["name"].Value = Server.UrlEncode(reader["name"].ToString());

                           //Session["name"] = reader["name"].ToString();

                    }

                    reader.Close();

 

                    //알림X -> Response.Redirect()

                    //알림O -> alert() -> location.href=""

                    string script = "<script type='text/javascript'>alert('로그인 성공!!');location.href='" + FormsAuthentication.GetRedirectUrl(TextBoxID.Text, false) + "';</script>";

                    this.ClientScript.RegisterClientScriptBlock(this.GetType(), "login", script);

             }

             else

             {

                    string script = "<script type='text/javascript'>alert('아이디나 암호가 올바르지 않습니다.');</script>";

                    this.ClientScript.RegisterClientScriptBlock(this.GetType(), "login", script);

             }

 

             con.Close();

       }

}

 



Default

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

 

<html xmlns="http://www.w3.org/1999/xhtml">

<head runat="server">

    <title></title>

</head>

<body>

    <form id="form1" runat="server">

    <div>

   

       <h1>

                    Default.aspx<br />

                    <br />

                    [사이트 시작 페이지]<br />

                    <br />

                    <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="로그인"

                           Width="210px" />

                    <asp:Button ID="Button2" runat="server" Text="로그아웃" Width="199px"

                           onclick="Button2_Click" />

             </h1>

             <h2>

                    <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>

             </h2>

             <h2>

                    <asp:Label ID="Label2" runat="server" Text="Label"></asp:Label>

                    <br />

                    <br />

                    <asp:Button ID="Button3" runat="server" Text="회원만 클릭할 수 있는 버튼" Width="244px" />

                    <br />

                    <br />

                    <asp:Button ID="Button4" runat="server" Text="관리자만 클릭할 수 있는 버튼" Width="244px" />

             </h2>

             <p>

                    &nbsp;</p>

   

    </div>

    </form>

</body>

</html>




 using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.UI;

using System.Web.UI.WebControls;

 

public partial class _Default : System.Web.UI.Page

{

    protected void Page_Load(object sender, EventArgs e)

    {

             //로그인 유무 확인

             //if (Request.Cookies["_Auth"] != null)

 

             if (this.User.Identity.IsAuthenticated)

             {

                    //로그인O

                    Button1.Visible = false;

                    Button2.Visible = true;

                    Label1.Visible = true;

                    Label2.Visible = true;

 

                    //홍길동님(hong, Lv 1)

                    // -> Select

                    //Label1.Text = this.User.Identity.Name;

                    //Label1.Text = Request.Cookies["lv"].Value;

                    Label1.Text = string.Format("{0}({1}, Lv{2})", Server.UrlDecode(Request.Cookies["name"].Value), User.Identity.Name, Request.Cookies["lv"].Value);

 

                    Button3.Enabled = true;

 

                    if (Request.Cookies["lv"].Value == "2")

                           Button4.Enabled = true;

                    else

                           Button4.Enabled = false;

             }

             else

             {

                    //로그인X

                    Button1.Visible = true;

                    Button2.Visible = false;

                    Label1.Visible = false;

                    Label2.Visible = false;

 

                    //Button3.Enabled = false;

                    //Button4.Enabled = false;

                    Button3.Visible = false;

                    Button4.Visible = false;

             }

    }

       protected void Button1_Click(object sender, EventArgs e)

       {

             Response.Redirect("Login.aspx");

       }

       protected void Button2_Click(object sender, EventArgs e)

       {

             //로그 아웃

             //Response.Cookies["_Auth"].Expires = DateTime.MinValue;

             System.Web.Security.FormsAuthentication.SignOut();

             Response.Redirect("Default.aspx");

       }

}

 



Member

 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Member.aspx.cs" Inherits="Member_Member" %>

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

 

<html xmlns="http://www.w3.org/1999/xhtml">

<head runat="server">

    <title></title>

</head>

<body>

    <form id="form1" runat="server">

    <div>

   

       <h2>

                    Member.aspx<br />

                    <br />

                    <br />

                    로그인을 한 유저만 접근이 가능한 페이지!!</h2>

             <br />

             <br />

   

    </div>

    </form>

</body>

</html>

 

 


using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.UI;

using System.Web.UI.WebControls;

 

public partial class Member_Member : System.Web.UI.Page

{

    protected void Page_Load(object sender, EventArgs e)

    {

             //로그인 유무?

             if (!User.Identity.IsAuthenticated)

             {

                    string script = @"<html><body><script type='text/javascript'>

                                 alert('로그인 후 접근 가능!!');

                                 history.back();

                           </script></body></html>";

                    Response.Write(script);

                    Response.End();

             }

    }

}

 

반응형