| [ASP.NET 2.0] | |
[FreeCoder] (1) Login Controls - Web Site Administration Tool | |
Asp.net 프로그래밍을 해봤다면 Web.config 를 모르는 사람은 없을 것이다. Web.config를 모두들 구성해
로그인 컨트롤들에 대해 알아보기전에 유저, 그룹, 액세스 제어를 설정할수 있는 web.config 파일을 쉽게 Web Site Administration ToolWeb Site Administration tool( 이하 웹사이트 관리 툴 ) 은 상단의 website 의 ASP.NET Configuration을 선택하여 사용할수 있다.
Web Site Administration tool 은 총 4개의 탭으로 이루어져 있으나 안내를 하고 있는 Home 탭을 제외 먼저 웹 사이트 관리 툴은 웹페이지 형식으로 되어져 있다. 어디에선가 우리가 만드는 Website와 같이 [asp.netwebadminfiles] C:\WINDOWS\Microsoft.NET\Framework\v2.0.50215\Temporary ASP.NET Files\asp.netwebadminfiles
SecurityHome 에서 Security 탭에 대한 내용이 간단히 나와 있다. 사이트에 대한 유저(user), 역할(role), 액세스 Security 에는 우리가 알아야 할 내용들에 대해 간략히 설명하고 있다. 두문단에 의해 나누어져 있는데 우리는 Security 탭을 눌렀을때 바로 생성되는 database 파일을 찾아볼수 있다.
확장자는 MDF , LDF 의 MSSQL 확장자이다. 내부적으로 MSSQL 데이터 베이스를 사용하고 있음을 알수 있다. Security 탭의 안내 메세지에서 MS Access 를 지원한다는 말은 기존에 Access 파일과 MSSQL 파일 모두를 wizard를 실행하기전에 web site 에 일반 폴더(Regular Folder) 하나를 생성하자. 관리자를 위한 페이지 Security 탭을 처음 사용한다면 화면 중앙의 step by step형식의 의 wizard 를 이용할것을 권장하고 있다. [ Security Tab 의 처음 사용자를 위한 Wizard 링크 ] Use the security Setup Wizard to configure security step by step.
Step2. 웹에서 사용자가 구성한 웹페이지를 사용하기 위해 From the internet 을 선택하고 다음을 누르자
- 다음 버튼을 누름과 동시에 web.config 에 다음과 같은 요소가 포함 된다. [ web.config ] <system.web> <authentication mode="Forms" /> </system.web> Step3 사이트 관리 데이터를 저장하기 위한 provier 를 선택할수 있다는 안내 메세지이다. 다음을 누르자. Step4. 롤에관한 내용은 나중에 구성할것이다. Enable roles for this Web site. 는 체크하지 않는다 Step5. 사용자를 생성하자. 주의 해야 할것은 패스워드를 만들때 특수 문자를 넣어야 쉽게 생성할수
Step6. Access Rules을 추가할수 있다 룰을 적용할 폴더를 위자드를 실행하기전에 만든AdminPages를
Add this Rule 버튼 을 눌러 생성한 룰을 저장하자. [ AdminPages\web.config ] <?xml version="1.0" encoding="utf-8"?> <configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0"> <system.web> <authorization> <deny users="?" /> </authorization> </system.web> </configuration>
Roles Enable Roles ( 롤을 적용여부를 쉽게 선택할수 있다. ) 이탭의 마지막사용으로 롤을 생성해보자. Create or Manage roles 링크 버튼을 누르게 되면 롤의 이름을 지정한후 .
Application Configuration Application Settings - 특정 변수와 값을 지정하던것을 툴로써 제공한다. [ web.config ] <appSettings> <add key="dbconnecting" value="server=(local); database=pubs; User ID=sa; Password=;" /> </appSettings> [ appSetting 변수 사용] string strConn = ConfigurationManager.AppSettings["dbconnecting"];
SMTP Settings 이 세팅은 로그인 창에서 패스워드 잊었을 경우 사용자 등록시 입력한 메일 주소로 보낼수 있도록 smtp 서버를 어째든 생성되는 코드 형식은 다음과 같다. [ web.config ] <configuration> <system.net> <mailSettings> <smtp> <network host="smtp.myhost.com" /> </smtp> </mailSettings> </system.net> </configuration>
Application Status 이 옵션을 통해 application 을 중지시킬수 있다. [ web.config ] <httpRuntime enable="false" /> => 정지 시켰을 경우 위와 같은 요소가 삽입되나 실행은 위의 요소가 제거되는것이 실행이다. (실행은 Default 이므로) Debugging and Tracing 디버깅및 추적 구성하기 화면 디폴트 에러페이지 선택화면 [ web.config ] <configuration> <system.Web> <customErrors defaultRedirect="~/MyDefaultErrorPage.aspx" /> <trace enabled="True" localOnly="false" /> <compilation debug="True" /> </system.Web> </configuration>
Provider Configuration- 멤버쉽이나 롤 관리 와 같은 다양한 요소의 데이터의 저장 공간을 관리 할수 있는 provider class 를 제공한다. - 첫 화면에 두개의 선택 화면이 있다. 1.사이트의 모든 관리 데이터를 위한 Provider 를 선택화면, 베타 버전이라 그런지 선택할것이 하나이다 ^^;
- Membership Provider 아직 Provider 의 선택화면에는 들어가 있진 않지만 SQL Server를 Provider 를 선택하고자 할때 다음과 다음과 같은 폴더에서 옵션없이 다음명령을 실행한다. 알고 있겠지만 /? 옵션으로 여러 옵션에 대해 C:\WINDOWS\Microsoft.NET\Framework\v2.0.50215>aspnet_regsql.exe 1. ASP.NET SQL Server 세팅에 대한 환영 메세지이다.
2. 수행하려고 하는 작업에 대한 선택이다. 필자는 SQL Server 구성을 선택하였다.
3. 데이터 베이스에 접근하고자 하는 연결 정보를 입력하고 있다. |
|
|
| ASP.NET 2.0] | |
[FreeCoder] (2) Login Controls - Login Controls | |
첨부파일 : login_02.zip(3939Kb) 이전 아티클에서 웹사이트 관리 툴에 대해서 다뤄 봤다. 이제 실제적으로 로그인 컨트롤에 대해 알아보도록 하자. 로그인 컨트롤들을 하나씩 배치하면서 그 컨트롤에 대해 알기 보다. 따라하기 식으로 따라해보고 그 간편함을 먼저 느껴본후 컨트롤에 대해 알아보도록 하자. 로그인 컨트롤 사용하기 새 항목 추가하기를 눌러 Home.aspx 를 하나 생성하고 시작페이지로 등록하자. 우리는 로그인 페이지로 이동하기 위한 버튼을 하나 만들것이다. 실제적으로는 버튼이 아닌 툴박스의 Login
이 컨트롤을 클릭하면 login 페이지로 이동 하게 될것이다. 사이트 명을 선택해 아이템을 추가해 login.aspx 페이지를 생성하자. 로그인에 대한 Error 메세지를 보여주기 위해 Validation 컨트롤을 추가할 것이다. 다시 Home.aspx 화면으로 돌아와 Login 그룹에서 LoginView 컨트롤을 페이지에 추가한다.
LoginView 컨트롤을 선택해 오른쪽 마우스를 눌러 Edit Template 메뉴중 AnonymousTemplate 항목을
다시 LoginView 컨트롤을 선택해 오른쪽 마우스를 눌러 Edit Template 메뉴의 LoggedInTemplate 을 선택하여 로그인 되었을때에 대한 내용을 입력할수 있다.. 로그인 그룹에서 LoginName 컨트롤을 Template
LoginView 의 오른쪽 마우스를 눌러 End Template Editing 을 선택하여 편집을 마치자. 로그인에 입력할 계정과 패스워드는 이전 웹사이트 관리자 툴에서 설정한 계정과 아이디를 넣으면 된다. 로그인 전의 안내메시지 로그인 화면에서의 인증, 로그인 된후의 모습까지 완벽하게 동작하는 몇가지 설정만으로 로그인 페이지를 쉽게 만들수 있다는걸 알았다. 사용된 컨트롤에 대해 알아보자. LoginStatus 이미 미심적게 생각하고 있었겠지만( 전 모르고 있었습니다 ^^;) 컨트롤을 추가하고 어떠한 설정도 없이 [web.config] <configuration> <system.web> <authentication mode="Forms"> <forms ...... loginUrl="/login.aspx" ...... /> </authentication> </system.web> </configuration> login.aspx 를 loginNew.aspx 로 바꾼후 web.config 파일을 다음과 같이 바꿔 실행해 보도록 하자. [web.config] <authentication mode="Forms"> <forms loginUrl="~/loginNew.aspx" /> </authentication> 잘 동작하는것을 알수 있다.
컨트롤의 옆에 Label 컨트롤을 하나 위치시켜 다음과 같은 값을 넣어 확인해 보도록 하자. [Home.aspx] Label1.Text = Request.IsAuthenticated.ToString(); => 이 IsAuthenticated 속성값을 이용해 다른 동작을 하도록 이용할수 있다. 기본값으로 보여지는 login 의 Text 형식의 문자는 LoginText, LogoutText, LoginImageUrl, LogoutImageUrl 등의 로그 아웃을 하면 Refresh 되어 logout 되는것을 볼수 있다. 만약 다른 페이지로 loginName 로그인된 사용자의 이름을 알수 있다. 이름의 형식은 FormatString 속성을 통해 쉽게 변형할수 있다. [Home.aspx] LoginName1.FormatString = "회원 {0}님"; loginView template 안의 컨트롤에 대해 ViewChanging( 변경전 ) ViewChanged (변경후 )의 이벤트를 이용할수 있다. login login 컨트롤의 기능은 어떨지 몰라도 생긴 모습이 맘에 들지 않는다면 오른쪽 마우스를 눌러 show smart tag 메뉴를 눌러 로그인 페이지는 LoggingIn 이벤트가 발생하여 Authenticate 이벤트, 마지막으로 LoggedIn 이벤트의 순서로 이루어진다. LoggingIn 이벤트에서는 Id가 어떤형식( 메일주소 같은것)을 받는다면 Id의 형식(메일주소 형식)을 체크해 볼수 있을것이다. Authenticate 이벤트 에서는 사용자가 따로 생성한 로그인 방식으로 로그인 해볼수 있을것이다. [loginPage.aspx] private void OnAuthenticate(object sender, AuthenticateEventArgs e) { bool Authenticated = false; Authenticated = SiteSpecificAuthenticationMethod(Login1.UserName, Login1.Password); e.Authenticated = Authenticated; }
정리 1. 로그인 컨트롤을 사용한 로그인 페이지를 구성해 보았다.
|
| [ASP.NET 2.0] | |
[FreeCoder] (3) Login Controls - Security | |
첨부파일 : login_03.zip(3950Kb) 웹 사이트 관리 툴과 로그인 페이지을 이용해 웹 페이지에 대한 권한 관리를 통해 사이트 에 대한 보안 설정을 해보도록 하자. 제한된 페이지에 접근제어 하기 관리자나 또는 멤버들만 접근할수 있는 페이지와 같은 제한된 자원에 대한 접근에 대한 관리를 하고자 할경우 롤을 사용하면 효과적으로 관리 할수 있다. 이전 아티클에서 배워본 웹사이트 관리 툴을 이용하여 롤과 룰의 설정하고 로그인 페이지와 함께 액세스 권한이 어떤식으로 Application에 활용되는지 알아보고 관리자와 일반 사용자간의 로그인에 따른 페이지 접근제어를 알아보도록 하자. 기존에 생성한 AdminPages 폴더가 존재 할것이다. 이 페이지에 룰(접근제어) Anonymous, Deny 을 설정해 보았었다. AdminPages 를생성했을때와 마찬가지로 일반 폴더 하나를 UserPages라는 이름으로 생성하도록 하자. 이폴더에는 는 로그인한 사용자가 접근할수 있는 웹 페이지들이 존재할것이다.
이제 웹사이트 관리 툴(Web Site Administration Tool )을 사용해 user를 다음과 같이 구성하자. admin01, admin02, user01, user02, member
계정에 롤(그룹)을 생성해 할당하도록 하자. AdminGroup : admin01, admin02, member UserGroup : user01, user02, member
룰( 액세스 제어 ) 을 생성해 다음과 같이 구성하자. Access Rule 생성 UserPages - Anonymous Users , Deny AdminPages - Role members(AdminGroup) , Allow - All users, Deny 설정된 web.config 는 다음과 같다. [AdminPages/web.config] <?xml version="1.0" encoding="utf-8"?> <configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0"> <system.web> <authorization> <allow roles="AdminGroup" /> <deny users="*" /> </authorization> </system.web> </configuration> [UserPages/web.config] <?xml version="1.0" encoding="utf-8"?> <configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0"> <system.web> <authorization> <deny users="?" /> </authorization> </system.web> </configuration> Home.aspx 에 다음과 같이 추가하자. Hyperlink : Go User Pages => ~/UserPages/UserContent.aspx Hyperlink : Go Admin Pages=> ~/AdminPages/AdminContent.aspx UserContent.aspx 페이지에 User Content page 라 제목과 함께 HyperLink 컨트롤을 추가하여 Text : Home, NavigateUrl : "~/Home.aspx" 라고 설정하자. AdminContent.aspx 페이지 에도 Admin Content Page 라는 제목과 함께 HyperLink 컨트롤을 추가하여 Text : Home, NavigateUrl : "~/Home.aspx" 라고 설정하자. 이제 설정을 마무리 하고 접근 권한에 대한 테스트를 해보도록 하자. Home.aspx 를 시작 페이지로 하여 실행( Ctrl+F5 )하도록 하자. - Go User Page 링크 버튼을 누르게 되면 login 페이지로 Redirect 될것이다. - UserGroup 의 멤버인 user01, user02로 로그인 하도록 하자. - User Content Page 에서 Home을 눌러 Home 페이지에서 Go Admin pages 를 누르도록 하자. - 현재의 권한으로는 Admin 페이지를 볼수 없어 다시 로그인 페이지로 Redirect 될것이다. - AdminGroup( admin01, admin02, member )의 계정으로 로그인 하도록 하자. - 로그인후 Admin 페이지로 접근할수 있다 . 다시 홈으로 돌아와 Guest 페이지에 접근하도록 하자. - member는 양쪽의 롤에 모두 추가 했으므로 잘 된다고 생각해 볼수 있으나 admin01, admin02도 모두 접근할수 있는것은 액세스 권한에서 userpages는 로그인한 모든 사용자가 접근 가능 하도록 되어져 있기 때문이다. 결국 정리해보면 userpages : 로그인한 모든 사용자 . adminpages : AdminGroup 의 사용자만 . 자신이 속한 롤에 대한 정보를 보기 위해 다음과 같은 코드를 넣자. Home.aspx 에 ListBox control을 추가하여 id를 listRoles 라고 정하자. [Home.aspx] //if( User.Identity.IsAuthenticated ) if( Request.IsAuthenticated ) { listRoles.DataSource = Roles.GetRolesForUser(User.Identity.Name); listRoles.DataBind(); }
자신이 속한 롤(그룹)의 모습을 보여주고 있다. 정리 웹 사이트 관리자 툴을 사용하여 롤과 룰을 생성하고 각각의 폴더에 룰( 액세스 제한 ) 을
|
| ASP.NET 2.0] | |
[FreeCoder] (4) Login Controls - Sitemap | |
첨부파일 : sitemap.zip(3962Kb) 이전의 웹사이트 관리 툴과 login 컨트롤을 이용한 로그인 페이지를 사용하여 권한에 따른 페이지 접근을 다뤄 보았습니다 따로 이주제에 대해 다룰수 있겠지만 권한에 따라 페이지 접근권한을 다룬다음 다루는것이 좋을것 같다는 생각이 들어 이 아티클을 올립니다. 그럼 시작하겠습니다. SiteMap을 사용하여 보자. 좀더 그럴듯한 페이지를 위해 마스터 페이지를 하나 추가하도록 하자. 기존의 페이지 4개에 대해 적용하도록 할것이다. Master 명은 Master1.master 로 정하였다. 전체적인 레이아웃을 설정하기 위해 상단의 메뉴중 Layout 메뉴에서
각 페이지에 마스터를 적용하도록 하자. Home.aspx Login.aspx AdminPasges/ AdminContent.aspx UserPages / UserContent.aspx 마스터를 만들고 기존의 페이지를 마스터 적용할땐 직접 소스를 수정하여야 한다. 적용하는 방법을 간단히 보도록 하자. [ContentPage] <@% Page Language="C#" MasterPageFile="~/Master1.master" .. %>
페이지의 form 태그 안의 내용부분과 위의 <@% Page .. %>을 제외한 모든 부분을 지우도록한다. form 으로 싼부분을 다음과 같이 감싼다. ( 자세한것은 Master 아티클과 소스를 참조하자. ) [ContentPage] <asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server"> .. 내용 .. </asp:Content>
마스터가 적용된 페이지는 다음과 같다
여기서 페이지 세개의 Content Page 를 더 넣어 보도록 하자. 둘다 페이지를 생성할때 Select Master Page를 Article.aspx Blog.aspx Board.aspx 새로운 아이템을 추가하기를 하여 Web.sitemap을 추가하도록 하자.
sitemap 은 고수 닷넷의 sitemap 을 참조하여 구성하였다. 아티클에 관련해서는 Admin 이관리 한다는 전제하에 [Web.sitemap] <?xml version="1.0" encoding="utf-8" ?> <siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" > <siteMapNode title="Home" description="Home" url="~/Home.aspx" > <siteMapNode title="ArticlePages" description="Article Pages"> <siteMapNode title="Article" description="Article" url="~/Article.aspx" /> <siteMapNode title="AdminContent" description="Article Manage" url="~/AdminPages/AdminContent.aspx" /> </siteMapNode> <siteMapNode title="BlogPages" description="Blog Pages"> <siteMapNode title="Blog" description="Blog" url="~/Blog.aspx" /> <siteMapNode title="UserContent" description="Write Blog" url="~/UserPages/UserContent.aspx" /> </siteMapNode> <siteMapNode title="BoardPages" description="Board Pages"> <siteMapNode title="Board" description="Board" url="~/Board.aspx" /> </siteMapNode> <siteMapNode title="Logon" description="Logon" url="~/Login.aspx" /> </siteMapNode> </siteMap> 도구 상자의 Data 그룹에서 SiteMapDataSource 을 마스터 페이지에 추가하자 .
상단 오른쪽에 Navigation 그룹에서 SiteMapPath 컨트롤을 을 위치시키자 sitemapPath 컨트롤은 우리가 Navigation 그룹에서 TreeView 컨트롤을 Masterpage 의 중앙 왼쪽에 위치시켜 컨텐츠 메뉴를 쉽게 볼수 있도록 하자. TreeView 가 사용할 DataSoure 를 선택하기 위해 Treeview 오른쪽 마우스를 눌러 show smart tag 메뉴를 선택하여 SitemapDataSource 를 선택한다.
사이트 맵에 관련된 컨트롤들을 사용할 준비가 모두 끝났다 .이제 실행( ctrl + F5 )해보도록 하자. Treeview를 보게 되면 전체의 페이지가 모두 잘 나오는가? 실제로는 모두 잘나오면 않된다.(? ^^; ) 우리가 하고자 했던것은 권한에따라 보여지는 필더링된 웹사이트 맵이었기 때문이다. 정상적인 동작이었다면 로그인 되지 않은 지금의 Treview 의 상태는 AdminContent 페이지와 UserContent 페이지는 보여지지 않아야 한다. 만약 Admin Role의 계정으로 로그인 했을때 AdminContent 페이지가 보여져야 한다. 우리가 알아보고자 하는 Sitemap 의 필터링된 페이지 보기는 아쉽지만 정식 버전이 나올때까지 기다려야 할것 같다. 지금( 베타2)의 버전에서는 아직 지원하지 않고 있다.
SiteMapDataSource 을 추가한후에 사이트 맵과 별다른 설정없이 xml 형식의 sitemap 구조를 가져와 잘 동작하고 있다. Provider 형식을 지원하고 있기 때문에 현재의 설정과 같은 xml이 아닌 DB 형식의 Provider 등 다른 형식을 얼마든지 지원할수 있다는 얘기와 같다. Provider 를 바꾸기 위한 sitemap의 설정 기본 형식은 다음과 같다. [web.config] <siteMap defaultProvider="MyXmlSiteMapProvider" enabled="true"> <providers> <add name="MyXmlSiteMapProvider" description="SiteMap provider which reads in .sitemap XML files." type="System.Web.XmlSiteMapProvider, System.Web, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" siteMapFile="Myweb.sitemap" /> </providers> </siteMap> 사이트 맵에 대하여 그리고 사이트 맵을 사용하는 컨트롤에 대하여 아주 간단히 알아 보았다. sitemap 패스는 우리가 이동하는 Content 페이지에 따라 현재의 경로를 잘 표현해 주고 있고 treeview는 아직까진 필터링 되진 정리 1. SitemapPath 를 사용하여 현재의 경로를 표현하여 보았다. 참고 Extending ASP.NET 2.0 securityhttp://www.codeproject.com/aspnet/aspnet2security.asp Plan Your Migration to the Visual Studio 2005 Navigation Controlshttp://msdn.microsoft.com/msdnmag/issues/04/06/NavigationControls/default.aspx
|
'WEB > ASP / DotNet' 카테고리의 다른 글
| ADSI 메서드 호출 (0) | 2007/06/07 |
|---|---|
| ADSI 속성 호출 (0) | 2007/06/07 |
| Asp.net 2.0 login (0) | 2007/06/07 |
| 닷넷 공부에 꽤 큰 도움이 되는 사이트 (0) | 2007/06/07 |
| AJAX.NET (0) | 2007/06/07 |
| ASP.NET에서도 Include를 이용하자 (0) | 2007/06/07 |














































최근에 달린 댓글
링크
최근에 받은 트랙백
태그목록