Transcript ch13

13
보안(Security)
인증(Authentication)과 권한 부여(Authorization)
로그인 컨트롤 사용하기
멤버 자격 API와 역할 관리자
인증과 권한 부여
RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line

인증과 권한 부여의 개념
 인증과 권한 부여의 개념을 설명하기 위해 회원제 웹 사이트를 예로 들어보겠
습니다. 회원제 웹 사이트에서 회원은 회원에게만 공개되는 콘텐츠(정보 또는
기능)에 접근하기 위해 반드시 아이디와 암호를 입력하는 로그인 과정을 거치
는데 이러한 과정이 바로 인증(authentication)입니다. 즉, 인증은 특정 사용
자가 유효한 사용자인지를 판단하는 과정을 의미합니다.
 또한 인증 받았거나(인증된 사용자) 인증 받지 않은 사용자(익명 사용자)는 웹
사이트의 정책에 따라 콘텐츠에 접근 할 수 있는 자격이 일부 제한될 수 있습
니다. 예를 들어 자유 게시판의 글을 읽는 것은 인증된 사용자 또는 익명 사용
자 모두 가능합니다. 하지만 글을 쓰는 것은 인증된 사용자만 가능하게 해두
는 것이 보통입니다. 또한 공지 게시판 같은 경우는 인증된 사용자 및 익명 사
용자 모두 글을 읽을 수는 있지만 인증된 사용자라고 하더라도 글을 쓸 수는
없습니다. 공지 게시판에 글을 쓸 수 있는 사용자는 관리자 계정을 가진 사용
자로 제한하는 것이 보통입니다. 이렇게 웹 사이트에 존재하는 모든 사용자들
은 웹 사이트 정책에 따라 그 부류 별로 콘텐츠에 대한 접근이 제한 되는데 이
것을 권한 부여(authorization)라고 합니다. 즉, 권한 부여는 특정 사용자가 웹
사이트에서 제공하는 콘텐츠(정보 또는 기능)에 접근 가능한지를 판단하는 과
정을 의미합니다.
 회원제로 운영되는 모든 웹 사이트는 이렇게 인증과 권한 부여를 기초로 해서
보안 메커니즘을 구성합니다.
www.hanbitbook.co.kr
인증과 권한 부여
RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line
 ASP.NET의 인증 종류
 ASP.NET에서 사용하는 인증 방식은 크게 다음과 같
은 네 가지로 나뉩니다.
인증 방식
설명
윈도우 기반
(Windows-based)
이것은 Windows(운영체제)의 권한 제어 방식을 웹 사이트에 그대로 적용한 인증 처리 방식입
니다. 하지만 불특정 다수가 접속하는 인터넷 환경에서는 모든 계정을 Windows에서 관리할 수
없다는 단점을 가집니다. 그러므로 윈도우 기반 인증은 주로 인트라넷 환경에서 사용됩니다.
폼 기반
(Forms-based)
HTTP 쿠키와 HTML 폼을 이용하여 인증합니다. 폼 기반 인증은 ASP.NET에서 제공하는 인증
관련 API를 사용할 수 있기 때문에 인증 처리를 쉽게 할 수 있다는 장점이 있습니다. 참고로
ASP.NET 2.0에서 인증 관련 처리를 자동으로 해주는 멤버 자격(membership)은 폼 기반 인증
을 사용합니다.
Passport
마이크로소프트에서 제공하는 인증 서비스로서 마이크로소프트 Passport의 파트너로 등록된
사이트에서 사용자 프로필을 공유하는 서비스 입니다. 즉, 한번의 로그인으로 여러 사이트에서
인증 가능 하도록 하는 서비스를 말합니다. 하지만 상용 서비스라는 단점이 있습니다.
사용자 지정
인증 작업을 ASP.NET에서 제공하는 인증 방식을 사용하지 않고 인증과 관련된 프로세스를 개
발자가 직접 구현합니다. 개발자가 원하는 대로 세세한 구현을 할 수 있다는 장점이 있지만 다
른 인증 방식에 비해 많은 개발 시간을 필요로 한다는 단점도 있습니다.
[ASP.NET 인증 방식]
www.hanbitbook.co.kr
인증과 권한 부여
RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line
<여기서 잠깐> 쿠키(cookie)란?
쿠키는 사전적 의미로 ‘비스킷’, ‘납작한 과자’ 등의
뜻을 가지지만 컴퓨터 용어로 사용될 때는 인터넷
접속 시 사용자 정보를 클라이언트 PC에 저장하는
파일의 의미로 사용됩니다. 그러므로 쿠키를 사용하
면 각 사용자의 정보를 저장할 수 있을 뿐만 아니라
인증과 관련된 정보도 함께 저장할 수 있습니다. 쿠
키는 각 Windows 계정 별로 다음과 같은 위치
에 .txt 파일로 저장됩니다.
C:\Documents and Settings\User\Cookies\
www.hanbitbook.co.kr
인증과 권한 부여
RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line
 ASP.NET 1.x에서는 주로 사용자 지정 인증 방식을
사용해서 인증 처리를 했던 것이 사실 입니다. 이것
은 물론, 인증 처리 코드를 직접 작성해야 하는 어려
움도 있지만 웹 사이트의 인증과 관련된 부분을 세
밀하게 제어할 수 있는 장점이 있었기 때문입니다.
하지만 이 책에서는 ASP.NET 2.0에서 제공해주는
새로운 인증 관련 클래스 및 로그인 컨트롤을 사용
하기 위해 폼 기반 인증을 사용할 것입니다.
www.hanbitbook.co.kr
인증과 권한 부여
RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line
 다음은 ASP.NET 2.0에 새로 추가된 로그인 컨트롤
의 모습입니다.
www.hanbitbook.co.kr
인증과 권한 부여
RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line
 폼 기반 인증
 폼 기반 인증은 위에서도 간단히 설명 했듯이 쿠키
와 ASP.NET에서 제공해주는 인증 관련 API를 사용
해서 인증 처리를 하는 것을 말합니다.다음은 폼 기
반 인증의 처리과정을 도식화한 그림입니다.
www.hanbitbook.co.kr
인증과 권한 부여
RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line
 접근이 제한된 페이지를 사용자가 요청하게 되면 우선, 인증
쿠키 존재 여부를 확인해서 인증 과정을 거칩니다. 만약 인증
쿠키가 존재한다면 이번에는 페이지 접근 권한 여부를 묻게 되
고 페이지 접근 권한이 있다면 최종적으로 요청한 페이지에 접
근하게 됩니다. 하지만 인증 과정에서 인증 쿠키가 존재하지
않는다면 우리가 흔히 웹 사이트에서 볼 수 있는 로그인 페이
지로 이동하여 아이디 및 암호를 입력하고 인증 과정을 거치게
됩니다. 유효한 아이디와 암호라면 클라이언트 PC에 인증 쿠
키가 자동으로 생성되고 인증 처리가 완료됩니다. 인증 처리가
완료 되면 다시 사용자의 권한 여부가 체크되고 요청한 페이지
에 대한 접근 여부를 판단 하게 됩니다.
 폼 기반 인증을 사용하기 위해서는 먼저 다음과 같이 구성 파
일을 수정해 주어야 합니다.
www.hanbitbook.co.kr
인증과 권한 부여
RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line
<configuration>
<system.web>
<authentication mode="Forms" />
</system.web>
</configuration>
 Web.config 파일을 생성하면 기본적으로 <authentication>
요소의 mode 특성이 Windows로 지정 됩니다. 즉, ASP.NET
의 기본 인증은 윈도우 기반 인증이라는 뜻이며 이것을 Forms
로 수정하면 폼 기반 인증으로 변경할 수 있습니다. mode 특
성에는 Windows, Forms 외에 Passport 및 None 값을 지정할
수 있으며 이것은 위의 표에서 소개한 인증 방식과 일치합니다.
참고로 None은 사용자 지정 인증 방식을 의미합니다.
www.hanbitbook.co.kr
인증과 권한 부여
RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line
 [예제 13-1] 폼 기반 인증 예제
www.hanbitbook.co.kr
인증과 권한 부여
RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line
<여기서 잠깐> API(Application Interface)란?
API는 응용 프로그램 인터페이스라고도 하며 특정 응용 프로
그램의 기능을 손쉽게 이용할 수 있도록 해주는 인터페이스를
의미합니다. API는 메서드 또는 속성 등의 형태로 제공되는 것
이 보통입니다.
www.hanbitbook.co.kr
인증과 권한 부여
RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line
 구성 파일의 <authentication> 요소 하위에 있는
<forms> 요소는 폼 기반 인증의 세세한 제어를 위
해 여러 가지 특성들을 제공합니다. 다음은
<forms> 요소의 주요 특성입니다.
특성
cookieless
New in 2.0
default
설명
인증 쿠키의 사용 여부 및 동작을 정의합니다.
UserCookies: 장치에 관계없이 쿠키를 항상 사용합니다.
UserUrl: 쿠키를 사용하지 않고 인증 정보를 URL에 저장합니다.
AutoDetect: 브라우저에서 쿠키를 지원하면 쿠키를 사용하고 그렇지 않으면 쿠키
를 사용하지 않습니다.
UseDeviceProfile(기본값): 장치 프로필에서 쿠키를 지원하면 쿠키를 사용하고,
그렇지 않으면 쿠키를 사용하지 않습니다.
인증 후 리디렉션할 기본 URL을 지정합니다. 기본값은 Default.aspx 입니다.
New in 2.0
domain
New in 2.0
loginUrl
쿠키를 공유할 수 있도록 하는 도메인을 지정 합니다. 기본값은 빈 문자열(“”) 입
니다. 예를 들어, 이 특성에 dotnetpro.co.kr이라는 값을 지정하면,
test1.dotnetpro.co.kr, test2.dotnetpro.co.kr 등과 같은 동일한 도메인 내에서
쿠키를 공유할 수 있습니다.
www.hanbitbook.co.kr
유효한 인증
쿠키가 없을 때 리디렉션할 URL을 지정합니다. 기본값은
인증과 권한 부여
RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line
name
인증 쿠키의 이름을 지정합니다. 기본값은 .ASPXAUTH 입니다.
여러 웹 응용 프로그램이 단일 웹 서버에서 실행되고 각 응용 프로그램에 고유한
쿠키가 필요하면 각 응용 프로그램의 Web.config 파일에서 고유한 쿠키 이름을
지정하면 됩니다.
path
쿠키의 경로를 지정합니다. 기본값은 슬래시(/) 입니다.
protection
쿠키에 사용되는 암호화 유형을 지정합니다.
Validation: 쿠키 전송 시 데이터 변경 여부를 체크하여 데이터의 유효성을 유지하
도록 지정합니다.
None : 3DES 또는 DES를 사용하여 쿠키를 암호화하지만 쿠키에서 데이터 유효
성 검사를 수행하지 않도록 지정합니다.
Encryption: 개인 설정 정보를 제공할 경우에만 쿠키를 사용하고 보안 요구 사항
이 낮은 사이트에 대해서는 암호화와 유효성 검사를 모두 해제하도록 지정합니다.
All(기본값): 응용 프로그램이 데이터 유효성 검사 및 암호화를 모두 사용하여 쿠키
를 보호하도록 지정합니다.
timeout
쿠키가 만료될 때까지의 시간(분)을 정수 단위로 지정합니다. 기본값은 30(분)입
니다.
slidingExpiration
상대(sliding) 만료의 설정 여부를 지정합니다. 기본값은 .NET Framework 1.x에
서는 True이고 .NET Framework 2.0에서는 False입니다.
True: 상대(sliding) 만료를 사용하도록 지정합니다. 상대(sliding) 만료란 인증 쿠
키 만료 시점이 사용자의 후속 요청에 대해 상대적이라는 뜻입니다. 즉, 사용자가
인증 받은 후 다시 페이지를 요청하면 요청한 시점에서 timeout 특성에서 지정한
시간만큼 인증 쿠키 만료 시간을 다시 갱신합니다.
www.hanbitbook.co.kr
인증과 권한 부여
RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line
False: 상대(sliding) 만료를 사용하지 않도록 지정합니다. 즉, 인증 쿠키는 사용자
의 후속 요청에 상관없이 time 특성에서 지정한 만료 시간 후에 바로 만료됩니다.
 권한 부여
[<forms> 요소의 주요 특성]
 폼 기반 인증에서 권한 부여는 Web.config 파일의
<authorization> 요 소 에 서 지 정 합 니 다 .
<authorization> 요소는 접근 거부 및 허가를 지정
하는 다음과 같은 하위 요소를 가집니다.
- <deny>
- <allow>
www.hanbitbook.co.kr
인증과 권한 부여
RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line
 또한 <deny>, <allow> 요소는 users, roles라는 특
성을 제공하는데 이 특성들은 각각 사용자(users)와
역할(roles) 별 접근 권한을 지정하는데 사용됩니다.
특히, 사용자(users)를 지정할 때에는 다음과 같은
특수 문자를 사용할 수 있습니다.
사용자 이름
설명
*
모든 사용자를 의미합니다.(익명 사용자 포함)
?
익명 사용자를 의미합니다.
[<deny>, <allow> 요소의 users 특성에 사용되는 특수 문자]
www.hanbitbook.co.kr
인증과 권한 부여
RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line
<여기서 잠깐> 역할(role)이란?
역할은 보안면에서 동일한 권한을 가진 그룹을 의미
하며 여기에 여러 사용자들을 포함시킬 수 있습니다.
이렇게 역할을 만드는 이유는 각 사용자 별로 권한
을 주는 것 보다 특정 역할을 만들고 이 역할에 권한
을 주어 이 역할에 포함된 모든 사용자들에게 일괄
적으로 권한을 부여 하는 것이 좀더 효율적이기 때
문입니다.
www.hanbitbook.co.kr
인증과 권한 부여
RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line
 다음은 모든 익명 사용자(?)를 웹 사이트에 접근하
지 못하게(<deny>) 하는 구문입니다.
<authorization>
<deny users="?"/>
</authorization>
 다음은 아이디(이름)가 ‘aaaa’, ‘bbbb’ 인 사용자만
접근을 허용(<allow>)하고 나머지 모든 사용자들(*)
의 접근을 거부(<deny>)하는 구문입니다.
<authorization>
<allow users=”aaaa,bbbb”/>
<deny users="*"/>
</authorization>
www.hanbitbook.co.kr
인증과 권한 부여
RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line
 다음은 ‘Admins’ 라는 역할을 가진 사용자들만 접근
을 허용(<allow>)하고 나머지 모든 사용자들(*)의
접근을 거부(<deny>)하는 구문입니다.
<authorization>
<allow roles=”Admins”/>
<deny users="*"/>
</authorization>
 이와 같이 <deny>, <allow> 요소와 users, roles 특
성을 사용하면 웹 응용 프로그램 단위로 영향을 미
치는 권한을 여러분이 원하는 대로 설정할 수 있습
니다.
www.hanbitbook.co.kr
인증과 권한 부여
RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line
 그렇다면, 특정 페이지에만 권한 부여가 적용되도록 하려면 어
떻게 해야 할까요? 그것은 다음과 같이 Web.config 파일에서
<location> 요소를 사용하면 됩니다.
<configuration>
<system.web>
<authorization>
<deny users="?"/>
</authorization>
</system.web>
<location path=”SuperAdminPage.aspx”>
<system.web>
<authorization>
<allow roles=”SuperAdmins”/>
<deny users=”*”/>
</authorization>
</system.web>
</location>
</configuration>
www.hanbitbook.co.kr
인증과 권한 부여
RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line
 위처럼 <location> 요소의 path 특성을 사용하면 특
정 페이지만 권한 부여를 할 수 있습니다. 참고로
<location> 요 소 위 쪽 에 있 는 부 분 (<deny
users=”?”/>)은 웹 사이트 전체에 적용되는 권한 부
분입니다. 위의 구문은 모든 웹 페이지에서 익명 사
용 자 의
접 근 을
거 부
하 며 , 특 히
SuperAdminPage.aspx 페 이 지 에 서 는
SuperAdmins 역할을 가진 사용자만 접근 가능하도
록 지정합니다.
www.hanbitbook.co.kr
인증과 권한 부여
RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line
 또한 <location> 요소의 path 특성에 특정 폴더를 지정하여 다
음과 같이 폴더 하위에 있는 모든 페이지에 일괄적으로 권한
부여를 할 수 있습니다.
<location path=”secured”>
<system.web>
<authorization>
<allow roles=”SubAdmins”/>
<deny users=”*”/>
</authorization>
</system.web>
</location>
 위의 구문은 secured 폴더 하위에 있는 모든 페이지에
SubAdmins 역할을 가진 사용자만 접근 가능하도록 지정합니
다.
www.hanbitbook.co.kr
로그인 컨트롤 사용하기
RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line
 멤버 자격(Membership)
New in 2.0
 멤버 자격은 ASP.NET 2.0에서 제공해주는 로그인
컨 트 롤 , 멤 버 자 격 API, 멤 버 자 격 공 급 자
(membership provider)가 서로 유기적으로 동작하
여 보안 프로세스(사용자 생성, 로그인, 로그아웃 등
등)와 관련된 작업을 자동으로 처리해주는 기능을
말합니다.
www.hanbitbook.co.kr
로그인 컨트롤 사용하기
RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line
 다음은 ASP.NET 2.0의 멤버 자격의 구조를 나타낸
그림입니다.
www.hanbitbook.co.kr
로그인 컨트롤 사용하기
RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line
 위의 그림을 보면 멤버 자격 공급자가 멤버 자격
API와 데이터 소스 사이에 위치해 있는 것을 볼 수
있습니다. 이 위치에서 멤버 자격 공급자는 보안 프
로세스와 관련된 작업을 자동으로 처리합니다. 개발
자는 멤버 자격 API를 사용하여 프로그래밍 방식으
로 멤버 자격을 사용할 수 있고 내부적으로 멤버 자
격 API를 사용하는 로그인 컨트롤을 통해 어떠한 코
드 작성 없이 멤버 자격을 사용할 수 있습니다. 각
데이터 소스에는 그에 맞는 멤버 자격 공급자가 연
결되며 ASP.NET 2.0은 기본적으로 SQL Server와
연결되는 SqlMembershipProvider를 사용합니다.
www.hanbitbook.co.kr
로그인 컨트롤 사용하기
RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line
 이렇게 공급자를 사용하는 멤버 자격의 구조는 우리가 12장에
서 공부했던 사이트 탐색이 사이트 맵 공급자를 사용하는 구조
와 완전히 동일합니다. 다음은 사이트 탐색의 구조를 나타낸
그림입니다.
www.hanbitbook.co.kr
로그인 컨트롤 사용하기
RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line
 지금까지 설명한 사이트 탐색과 멤버 자격 외에 앞
으로 공부할 역할 관리자, 프로필, 개인 설정 등등의
기능들도 모두 위의 그림들과 동일한 구조와 패턴을
가지는데, 이처럼 각 데이터 소스에 맞는 공급자와
해당 API를 통해 관련 기능을 제어하는 패턴을 공급
자 모 델 디 자 인 패 턴 (provider model design
pattern)이라고 합니다. 다음은 공급자 모델 디자인
패턴을 나타낸 그림입니다.
www.hanbitbook.co.kr
로그인 컨트롤 사용하기
RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line
www.hanbitbook.co.kr
로그인 컨트롤 사용하기
RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line
 위에서 설명한 사이트 탐색, 멤버 자격은 서로 기능
만 다를 뿐 모두 공급자 모델 디자인 패턴을 그대로
따른다는 것을 알 수 있습니다. 앞으로 공부할 역할
관리자, 프로필, 개인 설정 등의 기능들도 공급자 모
델 디자인 패턴을 그대로 따르므로 위 그림의 구조
를 잘 기억해 두기 바랍니다.
 그럼, 다시 본론으로 돌아가서 멤버 자격에 대해 계
속적으로 알아봅시다. 기본적으로 정의되어 있는 멤
버 자격 공급자는 Machine.config 파일(필자의 경
우
C:\WINNT\Microsoft.NET\Framework\v2.0.xx
xxx\CONFIG\Machine.config 경로에 위치)에서
확인할 수 있으며 다음과 같이 정의되어 있습니다.
www.hanbitbook.co.kr
로그인 컨트롤 사용하기
RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line
<configuration>
<connectionStrings>
<add name="LocalSqlServer" connectionString="data
source=.\SQLEXPRESS;Integrated
Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User
Instance=true" providerName="System.Data.SqlClient" />
</connectionStrings>
<system.web>
<membership>
<providers>
<add name="AspNetSqlMembershipProvider"
type="System.Web.Security.SqlMembershipProvider, System.Web,
Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
connectionStringName="LocalSqlServer" enablePasswordRetrieval="false"
enablePasswordReset="true" requiresQuestionAndAnswer="true"
applicationName="/" requiresUniqueEmail="false" passwordFormat="Hashed"
maxInvalidPasswordAttempts="5" minRequiredPasswordLength="7"
minRequiredNonalphanumericCharacters="1" passwordAttemptWindow="10"
passwordStrengthRegularExpression="" />
</providers>
</membership>
</system.web>
</configuration>
www.hanbitbook.co.kr
로그인 컨트롤 사용하기
RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line
 위에서 보는 것처럼 멤버 자격 공급자
(<membership>)를 정의하는 <add> 요소는 보안
프로세스와 관련된 여러 가지 특성들을 포함하고 있
습니다. 다음은 멤버 자격 공급자를 정의하는
<add> 요소의 주요 특성입니다.
속성
설명
name
공급자의 이름을 지정합니다.
type
MembershipProvider 추상 기본 클래스를 구현하는 형
식을 지정합니다.
connectionStringName
<connectionStrings> 요소에 정의된 연결 문자열의 이
름을 지정합니다. 즉, 멤버 자격 공급자에 사용할 연결
문자열을 지정합니다.
enablePasswordRetrieval
멤버 자격에서 암호 찾기를 지원하는지 여부를 지정합
니다. [True, False(기본값)] 이 특성을 True로 지정하
면 암호 찾기를 지원합니다.
www.hanbitbook.co.kr
로그인 컨트롤 사용하기
RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line
enablePasswordReset
멤버 자격에서 암호 수정을 지원하는지 여부를 지정
합니다. 기본값은 SQL 공급자의 경우 True이고
Active Directory 공급자의 경우 False입니다.
requiresQuestionAndAnswer
멤버 자격에서 암호를 다시 설정하거나 찾기 위해
보안 대답이 필요한지 여부를 지정합니다. 기본값은
SQL 공급자의 경우 True이고 Active Directory 공
급자의 경우 False입니다. True이면 암호를 다시 설
정하거나 찾기 위해 보안 대답이 필요합니다.
requiresUniqueEmail
사용자 생성 시 입력하는 전자메일의 유일성
(unique) 체크 여부를 지정합니다. 기본값은 SQL
공급자의 경우 True이고 Active Directory 공급자의
경우 False입니다. True이면 사용자 생성 시 입력하
는 전자메일이 다른 사용자의 전자메일과 중복되어
서는 안됩니다.
passwordFormat
저장될 암호의 형식을 지정합니다.
Clear: 암호가 암호화되지 않습니다.
Encrypted: 암호가 <machineKey> 요소에 지정된
암호화 설정을 사용하여 암호화됩니다.
Hashed(기본값): 암호가 SHA1 해시 알고리즘을 사
용하여 단방향으로 암호화됩니다.
www.hanbitbook.co.kr
로그인 컨트롤 사용하기
RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line
maxInvalidPasswordAttempts
허용되는 잘못된 암호 또는 보안 대답 시도 횟수를
지정합니다. 만약 이 횟수가 구성된 값과 일치하면
해당 계정은 자동으로 차단됩니다. 기본값은 5입니
다.
minRequiredPasswordLength
암호에 필요한 최소 문자 수를 지정합니다. 기본값
은 1입니다. 이 특성은 0보다 작거나 128보다 큰
값으로 설정할 수 없습니다.
minRequiredPasswordLength
암호에 필요한 최소 문자 수를 지정합니다. 기본값
은 1입니다. 이 특성은 0보다 작거나 128보다 큰
값으로 설정할 수 없습니다.
minRequiredNonalphanumeric
Characters
유효한 암호에 포함되어야 할 최소 특수 문자(!,
@, ?, $ 등등) 수를 지정합니다. 기본값은 1입니다.
이 특성은 0보다 작거나 128 또는
minRequiredPasswordLength 값보다 큰 값으로
설정할 수 없습니다.
[<forms> 요소의 주요 특성]
www.hanbitbook.co.kr
로그인 컨트롤 사용하기
RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line
 또한 멤버 자격에서 여러분이 한가지 더 알고 있어야 할 부분이 있습
니다. 그것은 Machine.config 파일에 기본적으로 정의되어 있는 멤버
자격 공급자를 보면, 이 공급자가 SQL Server 2005 Express(SQL
Server Express)를 사용한다는 것입니다. 이것은 Machine.config 파
일에서 멤버 자격 공급자가 사용하는 연결 문자열(LocalSqlServer)의
특성 중 connectionString 특성의 값을 보면 알 수 있습니다(data
source=.\SQLEXPRESS).
<connectionStrings>
<add name="LocalSqlServer" connectionString="data
source=.\SQLEXPRESS;Integrated
Security=SSPI;AttachDBFilename=|DataDirectory|asp
netdb.mdf;User Instance=true"
providerName="System.Data.SqlClient" />
</connectionStrings>
www.hanbitbook.co.kr
로그인 컨트롤 사용하기
RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line
 즉, 로그인 컨트롤 또는 멤버 자격 API를 사용하여
보안 프로세스를 구현할 경우 사용자와 관련된 정보
의 저장 및 참조는 기본적으로 Machine.config 파
일 의
멤 버
자 격
공 급 자
(AspNetSqlMembershipProvider)에서 사용하는 연
결 문자열(LocalSqlServer)에서 지정한 DBMS 인
SQL Server 2005 Express에서 이루어진다는 뜻입
니다.
www.hanbitbook.co.kr
로그인 컨트롤 사용하기
RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line
<여기서 잠깐> SQL Server 2005 Express
SQL Server 2005 Express는 마이크로소프트가 이전에 배포한 무료
DBMS인 MSDE(Microsoft Desktop Engine)의 후신으로서 SQL
Server 2005의 한 버전(edition)입니다. 물론, SQL Server 2005
Express(이하 SQL Server Express) 또한 무료로 사용할 수 있는
DBMS이며 다른 상용 버전에 비해 기능적 제한이 있지만 MSDE보다
더 강력한 기능을 자랑합니다.
또한, 마이크로소프트에서는 SQL Server Express를 위해 SQL
Server 2000에서 사용된 쿼리 분석기와 비슷한 클라이언트 유틸리티
인 SQL Server Management Studio Express를 제공하고 있는데 이
것도 무료이므로 관심 있는 독자들은 아래의 주소에서 프로그램을 다
운 받은 후 설치해 보기 바랍니다. 참고로 아래 주소는 예제소스의
Chapter13 폴더에 포함되어 있으므로 복사해서 사용하기 바랍니다.
http://www.microsoft.com/downloads/details.aspx?displaylang
=ko&FamilyID=c243a5ae-4bd1-4e3d-94b8-5a0f62bf7796
www.hanbitbook.co.kr
로그인 컨트롤 사용하기
RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line
 그럼 본격적으로 로그인 컨트롤에 대해 공부해보겠
습니다. 다음은 우리가 공부할 로그인 컨트롤을 정
리한 표입니다.
로그인 컨트롤
설명
CreateUserWizard
사용자 정보를 입력 받아 새로운 사용자를 만들어 줍니다.
Login
로그인 기능을 제공합니다.
LoginView
인증된 사용자와 익명 사용자에게 보여줄 화면을 구분하여 나타냅니다.
LoginName
인증된 사용자의 이름을 표시합니다.
LoginStatus
인증된 사용자에게는 로그아웃 링크를 표시하고 익명 사용자에게는 로그인
링크를 표시합니다.
ChangePassword
암호 수정 기능을 제공합니다.
PasswordRecovery
암호 찾기 기능을 제공합니다.
[로그인 컨트롤]
www.hanbitbook.co.kr
로그인 컨트롤 사용하기
RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line
 CreateUserWizard 컨트롤
New in 2.0
 CreateUserWizard 컨트롤은 사용자 정보를 입력 받
아 새로운 사용자를 만들어 주는 컨트롤입니다. 다
음은 CreateUserWizard 컨트롤을 웹 폼 위로 끌어
다 놓았을 때의 기본적인 모습입니다.
www.hanbitbook.co.kr
로그인 컨트롤 사용하기
RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line
<asp:CreateUserWizard ID="CreateUserWizard1" runat="server" >
<WizardSteps>
<asp:CreateUserWizardStep
ID="CreateUserWizardStep1"
runat="server">
</asp:CreateUserWizardStep>
<asp:CompleteWizardStep
ID="CompleteWizardStep1"
runat="server">
</asp:CompleteWizardStep>
</WizardSteps>
</asp:CreateUserWizard>
www.hanbitbook.co.kr
로그인 컨트롤 사용하기
RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line
 <asp:CreateUserWizard> 컨트롤 선언 구문을 보면 예전에 7
장에서 배웠던 Wizard 컨트롤과 그 형식이 매우 유사하다는
것을 알 수 있습니다. 이것은 CreateUserWizard 컨트롤이
Wizard 컨트롤을 상속(inherit) 받아 그 기능을 확장 했기 때문
이며 사용법도 Wizard 컨트롤과 매우 비슷합니다.
 또한 앞에서도 설명 했듯이 로그인 컨트롤은 멤버 자격 공급자
와 유기적으로 동작 한다고 했습니다. 그러므로 표에서 소개한
멤버 자격 공급자를 정의하는 <add> 요소의 특성을 수정하면
수정된 설정 내용이 CreateUserWizard 컨트롤에 그대로 반영
됩 니 다 . 예 를
들 어 , <add> 요 소 에 서
requiresQuestionAndAnswer 특성 값을 False로 지정하면,
CreateUserWizard 컨트롤에서 보안 질문과 보안 대답 부분은
나타나지 않습니다. 참고로 보안 질문과 보안 대답은 암호 찾
기 시 사용되는 항목입니다.
www.hanbitbook.co.kr
로그인 컨트롤 사용하기
RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line
 <사용자 만들기> 버튼을 클릭하면 새로운 사용자가
생성됩니다. 물론 이때, 사용자 생성과 관련된 프로
세스는 멤버 자격 공급자에서 자동 처리되므로 우리
가 작성해야 할 코드는 단 한 줄도 없습니다.
 멤버 자격은 로그인 컨트롤, 멤버 자격 공급자 그리
고 멤버 자격 공급자와 연결된 데이터 소스와 유기
적으로 동작하여 보안 프로세스를 구현해 준다고 했
는데, 그러면 CreateUserWizard 컨트롤을 통해 사
용자가 입력한 정보는 실제로 어디에 저장되는 것일
까요?
 사용자 정보를 입력하고 <사용자 만들기> 버튼을
클릭하여 새로운 사용자를 만들면 App_Data 폴더
하위에 ASPNETDB.MDF 파일이 생성되는데, 사용
자 정보는 바로 이 곳에 저장됩니다.
www.hanbitbook.co.kr
로그인 컨트롤 사용하기
RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line
 ASPNETDB.MDF 파일은 SQL Server Express 파일 기반 데이
터베이스입니다. 그리고 서버 탐색기를 통해 ASPNETDB.MDF
파일의 내부를 들여다 보면(ASPNETDB.MDF 파일 더블클릭),
멤버 자격과 관계된 aspnet_Membership 테이블을 볼 수 있으
며, CreateUserWizard 컨트롤에서 입력 받은 정보들이 저장되
는 칼럼도 미리 정의되어 있는 것을 볼 수 있습니다(UserId,
Password, Email 등등). 그 외 ASP.NET 2.0에서 제공하는 기
타
다 른
서 비 스 를
위 한
테 이 블 들
(aspnet_PersonalizationAllUsers,
aspnet_PersonalizationPerUser, aspnet_Profile 등등)도 볼
수 있는데 이것들은 관련 내용을 다루면서 다시 설명하겠습니
다.
www.hanbitbook.co.kr
로그인 컨트롤 사용하기
RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line
www.hanbitbook.co.kr
로그인 컨트롤 사용하기
RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line
 이와 같이 App_Data 폴더에 ASPNETDB.MDF라는
이름의 파일이 생성되는 이유는 Machine.config 파
일에서 멤버 자격 공급자가 사용하는 연결 문자열의
특성 중 connectionString 특성의 값이 다음과 같이
정 의 되 어
있 기
때 문 입 니 다
(AttachDBFilename=|DataDirectory|aspnetdb.md
f).
<connectionStrings>
<add
name="LocalSqlServer"
connectionString="data
source=.\SQLEXPRESS;Integrated
Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.
mdf;User
Instance=true"
providerName="System.Data.SqlClient" />
</connectionStrings>
www.hanbitbook.co.kr
로그인 컨트롤 사용하기
RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line
 이렇게 SQL Server Express 파일 기반 데이터베이
스를 사용하면 사용자의 추가적인 설치 작업 없이도
즉시 데이터베이스를 만들 수 있다는 이점이 있습니
다.
 그럼, 여기까지의 내용을 간단히 정리해보겠습니다.
멤버 자격에서 로그인 컨트롤과 데이터 소스 사이에
위치해 있으면서 핵심적인 역할을 하는 멤버 자격
공급자는 기본적으로 Machine.config 파일에 다음
과 같이 정의되어 있으며 SQL Server Express 파일
기반 데이터베이스에 연결하는 LocalSqlServer라는
연결 문자열을 사용합니다.
www.hanbitbook.co.kr
로그인 컨트롤 사용하기
RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line
<configuration>
<connectionStrings>
<add name="LocalSqlServer" connectionString="data
source=.\SQLEXPRESS;Integrated
Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User
Instance=true" providerName="System.Data.SqlClient" />
</connectionStrings>
<system.web>
<membership>
<providers>
<add name="AspNetSqlMembershipProvider"
type="System.Web.Security.SqlMembershipProvider, System.Web,
Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
connectionStringName="LocalSqlServer" enablePasswordRetrieval="false"
enablePasswordReset="true" requiresQuestionAndAnswer="true"
applicationName="/" requiresUniqueEmail="false" passwordFormat="Hashed"
maxInvalidPasswordAttempts="5" minRequiredPasswordLength="7"
minRequiredNonalphanumericCharacters="1" passwordAttemptWindow="10"
passwordStrengthRegularExpression="" />
</providers>
</membership>
</system.web>
</configuration>
www.hanbitbook.co.kr
로그인 컨트롤 사용하기
RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line
 이제 여러분은 멤버 자격가 어떤 방식으로 구동되는지, 그 큰
틀을 이해할 수 있을 것입니다. 앞으로 공부할 다른 로그인 컨
트롤들(Login, LoginName, ChangePassword 등등)도
CreateUserWizard 컨트롤과 마찬가지로 Web.config 파일에
서 멤버 자격 공급자를 재정의하지 않는 이상 Machine.config
파일에 정의되어 있는 기본 멤버 자격 공급자
(AspNetSqlMembershipProvider)를 사용하여 데이터 소스
(ASPNETDB.MDF)에 연결하고 해당 보안과 관련된 작업들을
자동으로 처리합니다.
 CreateUserWizard 컨트롤을 사용한 예제는 다른 로그인 컨트
롤들을 살펴 본 후 다른 로그인 컨트롤들과 함께 다루어 볼 것
입니다. 그리고 새로운 멤버 자격 공급자를 Web.config 파일
에 추가하여 사용하는 방법은 예제 13-2에서 설명합니다.
www.hanbitbook.co.kr
로그인 컨트롤 사용하기
RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line
 Login 컨트롤
New in 2.0
 Login 컨트롤은 로그인 기능을 제공해주는 컨트롤
입니다. 다음은 Login 컨트롤을 웹 폼 위로 끌어다
놓았을 때의 기본적인 모습입니다.
<asp:Login ID="Login1" runat="server">
</asp:Login>
www.hanbitbook.co.kr
로그인 컨트롤 사용하기
RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line
 사용자가 <로그인> 버튼을 클릭하는 순간 Login 컨
트롤은 입력 받은 사용자 이름(계정)과 암호를 지정
된 멤버 자격 공급자로 넘겨주고 멤버 자격 공급자
는 해당 데이터 소스에 접근하여 일치하는 사용자
정보를 검색합니다. 만약 사용자 이름과 암호가 일
치하는 사용자 정보가 존재한다면 인증 쿠키를 생성
하여 인증 처리를 하고, 존재하지 않는다면 해당 결
과를 다시 Login 컨트롤로 돌려줍니다. 그리고 결과
를 돌려 받은 Login 컨트롤은 지정된 오류 메시지를
출력합니다.
 이러한 유기적인 처리 과정은 멤버 자격의 구조 그
림 또는 공급자 모델 디자인 패턴을 떠올려보면 쉽
게 이해할 수 있습니다.
www.hanbitbook.co.kr
로그인 컨트롤 사용하기
RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line
 LoginView 컨트롤
New in 2.0
 LoginView 컨트롤은 인증된 사용자와 익명 사용자에게 보여줄
화면을 구분해서 표시해주는 컨트롤입니다. 예를 들어, 흔히
회원제 웹 사이트에서는 다음과 같이 좌측 상단에 로그인 할
수 있도록 로그인 상자를 제공하는 것이 보통입니다.
www.hanbitbook.co.kr
로그인 컨트롤 사용하기
RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line
 로그인 상자를 통해 인증 절차를 거치면 로그인 상
자는 다음과 같이 변경됩니다.
www.hanbitbook.co.kr
로그인 컨트롤 사용하기
RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line
 이렇게 인증된 사용자와 익명 사용자에게 보여줄 화
면을 구분하여 표시해야 할 때 사용되는 컨트롤이
바로 LoginView 컨트롤입니다.
<asp:Login ID="Login1" runat="server">
</asp:Login>
www.hanbitbook.co.kr
로그인 컨트롤 사용하기
RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line
 물론, 이렇게 기본적인 LoginView 컨트롤을 사용하
면 우리가 원하는 동작을 이끌어 낼 수 없습니다. 다
음 과 같 이 LoginView 컨 트 롤 에 서 제 공 하 는
AnonymousTemplate과 LoggedInTempate을 추가
하여 익명 사용자 및 인증된 사용자에게 보여줄 화
면을 직접 디자인 해야 합니다.
<asp:LoginView ID="LoginView1" runat="server">
<AnonymousTemplate>
</AnonymousTemplate>
<LoggedInTemplate>
</LoggedInTemplate>
</asp:LoginView>
www.hanbitbook.co.kr
로그인 컨트롤 사용하기
RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line
 LoginName 컨트롤
New in 2.0
 LoginName 컨트롤은 인증된 사용자의 이름을 출력
하는 컨트롤이며 익명 사용자에게는 렌더링 되지 않
습니다. 다음은 LoginName 컨트롤을 웹 폼 위로 끌
어다 놓았을 때의 기본적인 모습입니다.
<asp:LoginName ID="LoginName1" runat="server" />
www.hanbitbook.co.kr
로그인 컨트롤 사용하기
RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line
 LoginStatus 컨트롤
New in 2.0
 LoginStatus 컨트롤은 인증된 사용자에게는 로그아
웃 링크를 표시하고 익명 사용자에게는 로그인 링크
를 표시해주는 컨트롤입니다. 다음은 LoginStatus
컨트롤을 웹 폼 위로 끌어다 놓았을 때의 기본적인
모습입니다.
<asp:LoginStatus ID="LoginStatus1" runat="server" />
www.hanbitbook.co.kr
로그인 컨트롤 사용하기
RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line
 익명 사용자에게 표시되는 로그인 링크를 클릭하면
구성 파일의 <authentication> 요소 하위의
<forms> 요소의 loginUrl 특성에서 지정한 페이지
URL로 이동합니다. 만약 <forms> 요소에 loginUrl
특성을 정의하지 않으면 기본값인 Login.aspx 페이
지로 이동합니다.
 그리고 인증된 사용자에게 표시되는 로그아웃 링크
를 클릭하면 자동으로 로그아웃(인증 쿠키 삭제)되
고 현재 페이지가 Refresh 됩니다.
www.hanbitbook.co.kr
로그인 컨트롤 사용하기
RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line
 ChangePassword 컨트롤
New in 2.0
 ChangePassword 컨트롤은 암호 수정 기능을 제공
하는 컨트롤입니다. 다음은 ChangePassword 컨트
롤을 웹 폼 위로 끌어다 놓았을 때의 기본적인 모습
입니다.
<asp:ChangePassword ID="ChangePassword1" runat="server">
</asp:ChangePassword>
www.hanbitbook.co.kr
로그인 컨트롤 사용하기
RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line
 ChangePassword 컨트롤이 제대로 동작하기 위해
서는 멤버 자격 공급자를 정의하는 <add> 요소의
passwordFormat 특성이 Clear 또는 Encrypted인
상태에서 사용자를 생성해야 하며 <add> 요소의
enabelPasswordRetrieval 특성이 True로 지정되어
있 어 야 합 니 다 . 만 약 <add> 요 소 의
passwordFormat 특성이 Hashed인 상태에서 사용
자를 생성하면 암호가 해시 알고리즘으로 암호화되
어 암호를 다시 찾을 수 없게 되며
ChangePassword 컨트롤 또한 제 기능을 하지 못합
니다.
www.hanbitbook.co.kr
로그인 컨트롤 사용하기
RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line
 PasswordRecovery 컨트롤
New in 2.0
 PasswordRecovery 컨트롤은 사용자가 잊어버린
암호를 사용자의 전자메일로 발송해주는 컨트롤입
니다. 다음은 PasswordRecovery 컨트롤을 웹 폼
위로 끌어다 놓았을 때의 기본적인 모습입니다.
<asp:PasswordRecovery ID="PasswordRecovery1" runat="server">
</asp:PasswordRecovery>
www.hanbitbook.co.kr
로그인 컨트롤 사용하기
RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line
 PasswordRecovery 컨트롤이 제 기능을 하기 위해
선 ChangePassword 컨트롤과 마찬가지로 멤버 자
격 공급자를 정의하는 <add> 요소의
passwordFormat 특성을 Clear 또는 Encrypted로
지정하고 enablePasswordRetrieval 특성을 True로
지정해야 합니다.
 그러므로 웹 사이트에서 멤버 자격의 암호 수정 및
찾기 기능을 사용하기 위해서는 애당초 멤버 자격
공급자를 정의하는 <add> 요소의 passwordFormat
특성을 Clear 또는 Encrypted로 지정하고 사용자를
생성해야 합니다. passwordFormat 특성이 Hashed
인 상태에서 생성된 사용자는 암호를 수정하거나 찾
을 수 없습니다.
www.hanbitbook.co.kr
로그인 컨트롤 사용하기
RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line
 찾은 암호를 사용자에게 전자메일로 발송하기 위해
서는 웹 서버에 SMTP 서비스가 설치되어 있어야 합
니다. SMTP(Simple Mail Transfer Protocol)는 전
자 메일을 발송하기 위한 프로토콜(규약)을 의미하
며 SMTP 서비스는 IIS에 포함되어 있으면서 전자 메
일 발송 요청이 일어날 경우 이것을 SMTP(메일 발
송 규약)에 따라 처리해주는 서비스를 말합니다.
SMTP 서비스와 관련된 자세한 내용은 ‘19장. 전자
메일 발송’ 을 참고하세요.
 그리고 전자메일이 발송되기 위해서는 최소한 다음
과 같이 <asp:PasswordRecovery> 컨트롤 선언 구
문 하위에 <MailDefinition> 요소를 추가하여 From
속성을 설정해 주고
www.hanbitbook.co.kr
로그인 컨트롤 사용하기
RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line
<asp:PasswordRecovery ID="PasswordRecovery1" runat="server">
<MailDefinition From="[email protected]" ></MailDefinition>
</asp:PasswordRecovery>
 Web.config 파일에 다음과 같은 SMTP의 Host 설
정을 추가해 주어야 합니다.
<configuration>
<system.web>
… 생략 …
</system.web>
<system.net>
<mailSettings>
<smtp>
<network host="127.0.0.1"/>
</smtp>
</mailSettings>
</system.net>
</configuration>
www.hanbitbook.co.kr
로그인 컨트롤 사용하기
RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line
 127.0.0.1은 localhost를 의미합니다.
 PasswordRecovery 컨트롤이 실행되면 우선, 사용자 이름을
묻고, 그 다음 회원 가입 시 입력했던 보안 질문에 대한 보안
대답을 묻습니다. 만약 보안 대답이 정확하다면 회원 가입 시
입력했던 전자메일로 암호가 발송됩니다.
 참고로 PasswordRecovery 컨트롤 하위의 <MailDefinition>
요소에서 제공하는 여러 속성(Subject, CC, IsBodyHtml,
BodyFileName 등등)들을 사용하면 메일 제목, 메일 참조,
Body 형식, Body 파일 등을 지정할 수 있습니다. 특히
BodyFileName 속성에는 메일의 배경으로 사용될 HTML 파일
을 지정할 수 있는데 이 HTML 파일 내부에 <%UserName%>,
<%Password%>라는 구문을 입력하면 HTML 파일에 사용자
이름과 암호가 자동으로 바인딩 되어 발송됩니다.
www.hanbitbook.co.kr
로그인 컨트롤 사용하기
RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line
 로그인 컨트롤을 사용한 예제
 [예제 13-2] 로그인 컨트롤을 사용한 예제
www.hanbitbook.co.kr
로그인 컨트롤 사용하기
RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line
 ASP.NET SQL Server 설치 마법사 사용하기
 지금까지 우리는 멤버 자격의 데이터 소스로 SQL
Server Express 파일 기반 데이터베이스를 사용했
습니다. 하지만 ASP.NET 2.0에서는 SQL Server
Express 파일 기반 데이터베이스와 동일한 레이아
웃을 가지는 데이터베이스를 SQL Server 2000에
생성할 수 있도록 ASP.NET SQL Server 설치 마법
사를 제공합니다.
 [실습] ASP.NET SQL Server 설치 마법사 사용하기
www.hanbitbook.co.kr
로그인 컨트롤 사용하기
RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line
 사 용 자 지 정 멤 버 자 격 공 급 자 (custom
membership provider)
 ASP.NET 2.0에서 제공해주는 기본적인 멤버 자격
에서는 사용자 이름(ID), 암호, 전자메일, 보안 질문,
보안 대답과 같은 미리 정해진 정보들을 입력 받고
다룰 수 있도록 해줍니다. 그렇다면, 이렇게 기본적
으로 제공해주는 정보들 외에 회원제 웹 사이트에서
사용될 수 있는 우편번호, 주소, 전화번호, 주민등록
번호와 같은 정보들을 멤버 자격에서 사용하려면 어
떻게 해야 할까요? 결론부터 말하자면, 멤버 자격
공급자를 사용자 지정하지 않는 이상(개발자가 임의
로 구현하지 않는 이상) 멤버 자격에서 새로운 정보
를 추가하여 사용할 수는 없습니다.
www.hanbitbook.co.kr
로그인 컨트롤 사용하기
RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line
 그러므로 로그인 컨트롤 및 멤버 자격 API에서도 새로운 정보
를 처리할 수 있도록 하려면 SqlMembershipProvider 클래스
를 상속 받아 다시 구현하거나 SqlMembershipProvider 클래
스의 부모 클래스인 MembershipProvider 클래스를 상속 받아
사용자 지정 멤버 자격 공급자(custom membership provider)
를 구현하는 수 밖에 없습니다.
<asp:PasswordRecovery ID="PasswordRecovery1" runat="server">
<MailDefinition From="[email protected]" ></MailDefinition>
</asp:PasswordRecovery>
 사용자 지정 멤버 자격 공급자 구현과 관련된 내용은 이 책의
범위를 벗어나므로 자세히 설명하지 않습니다.
www.hanbitbook.co.kr
멤버 자격 API와 역할 관리자
RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line
 멤버 자격 API
 로그인 컨트롤은 내부적으로 멤버 자격 API를 사용
하여 관련 프로세스를 처리하며 개발자는 멤버 자격
API를 소스코드에 직접 사용하여 멤버 자격을 프로
그래밍 방식으로 제어할 수 있습니다.
 멤버 자격 API에서 핵심이 되는 클래스는 다음의 두
클래스로 일축할 수 있습니다.
- Membership 클래스
- MembershipUser 클래스
 이 두 클래스를 사용하면 멤버 자격에서 제공하는
사용자 생성, 사용자 정보 참조, 사용자 정보 수정,
사용자 유효성 검사, 사용자 삭제 등등의 프로세스
를 손쉽게 구현할 수 있습니다.
www.hanbitbook.co.kr
멤버 자격 API와 역할 관리자
RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line
 사용자 생성
• 사 용 자 생 성 은 Membership 클 래 스 에 서 제 공 하 는
CreateUser() 메서드를 사용합니다.
메서드
설명
CreateUser(string
username, string password)
사용자 이름과 암호만 입력 받아 사용자를 생성합
니다.
CreateUser(string
username, string password,
string email)
사용자 이름, 암호, 전자메일을 입력 받아 사용자
를 생성합니다.
CreateUser(string
username, string password,
string email, string
passwordQuestion, string
passwordAnswer, bool
isApproved, out
MembershipCreateStatus
status)
사용자 이름, 암호, 전자메일, 보안 질문, 보안 대
답, 승인 여부, 사용자 생성 상태 개체를 입력 받아
사용자를 생성합니다.
[CreateUser() 메서드]
www.hanbitbook.co.kr
멤버 자격 API와 역할 관리자
RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line
• 이 메서드는 예를 들어 <회원 가입> 버튼이 클릭되었을 경우 다음과 같이
사용될 수 있습니다.
MembershipCreateStatus status;
Membership.CreateUser(txtUserName.Text, txtPassword.Text, txtEmail.Text,
txtPasswordQuestion.Text, txtPasswordAnswer.Text, true, out status);
switch (status) {
case MembershipCreateStatus.Success:
lblResults.Text = "회원 가입이 성공적으로 이루어졌습니다.!!!";
break;
case MembershipCreateStatus.InvalidUserName:
lblResults.Text = "사용자 이름이 유효하지 않습니다. 다시 입력하세요.";
break;
case MembershipCreateStatus.InvalidPassword:
lblResults.Text = "암호가 유효하지 않습니다. 다시 입력하세요.";
break;
... 생략 ...
default:
lblResults.Text = "회원 가입 도중 오류가 발생했습니다. ";
break;
}
www.hanbitbook.co.kr
멤버 자격 API와 역할 관리자
RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line
• CreateUser() 메서드를 사용해서 사용자를 생성하고 있으
며, MembershipCreateStatus 개체를 통해 사용자 생성 시
상태 값을 받아 옵니다. 그리고 CreateUser() 메서드를 통
해 입력한 정보는 당연히 멤버 자격 공급자에서 지정한 데
이터 소스에 저장됩니다.
www.hanbitbook.co.kr
멤버 자격 API와 역할 관리자
RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line
<Exercise 13-1> 멤버 자격 API를 이용한 사용자 생
성
로그인 컨트롤이 아닌 멤버 자격 API를 이용하여 다음과 같이
사용자를 생성하는 페이지를 구현해 봅시다.
www.hanbitbook.co.kr
멤버 자격 API와 역할 관리자
RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line
 사용자 정보 참조
• 사용자 생성 시 입력한 사용자 정보는 Membership 클래스
에서 제공하는 GetUser() 메서드를 사용해서 참조합니다.
GetUser() 메 서 드 는 사 용 자 정 보 를 가 지 고 있 는
MembershipUser 개체를 반환 합니다.
메서드
설명
GetUser()
현재 로그온 되어 있는 사용자의 정보(MembershipUser 개체)를
반환하고 해당 사용자의 마지막 작업 날짜/시간(aspnet_Users
테이블의 LastActivityDate 칼럼)을 업데이트합니다.
GetUser(string username)
매개변수로 정의된 사용자의 정보를 반환합니다.
GetUser(bool userInOnline)
현재 로그온 되어 있는 사용자의 정보를 반환 하고 매개변수로 정
의된 bool 형식의 값을 통해 해당 사용자의 마지막 작업 날짜/시
간을 업데이트 할 것인지의 여부를 결정합니다. 매개변수의 값이
True이면 마지막 작업 날짜/시간을 업데이트합니다.
GetUser(string username, bool
userInOnline)
첫번째 매개변수를 통해 해당 사용자의 정보를 반환하고 두번째
매개변수를 통해 해당 사용자의 마지막 작업 날짜/시간을 업데이
트 할 것인지의 여부를 결정합니다.
[GetUser() 메서드]
www.hanbitbook.co.kr
멤버 자격 API와 역할 관리자
RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line
• 이 메서드는 회원 정보 보기 페이지 또는 회원 수정 페이지
에서 회원 정보를 출력할 때 사용할 수 있습니다.
MembershipUser memUser = Membership.GetUser();
Response.Write(memUser.UserName + “<br>”);
Response.Write(memUser.Email + “<br>”);
Response.Write(memUser.LastActivityDate.ToString());
www.hanbitbook.co.kr
멤버 자격 API와 역할 관리자
RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line
 사용자 정보 수정
• 사용자 정보 수정은 Membership 클래스에서 제공하는
UpdateUser() 메서드를 사용합니다.
메서드
설명
UpdateUser(MembershipU
ser user)
매개변수로 정의된 MembershipUser 개체의 정보
대로 사용자 정보를 수정합니다.
[UpdateUser() 메서드]
• 이 메서드는 회원 수정 페이지에서 회원 정보를 수정 할 때
사용할 수 있습니다.
MembershipUser memUser = Membership.GetUser();
memUser.UserName = “수정된 사용자이름”;
memUser.Email = “수정된 전자메일”;
… 그 외 여러 사용자 관련 속성을 수정 한다 …
Membership.UpdateUser(memUser);
www.hanbitbook.co.kr
멤버 자격 API와 역할 관리자
RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line
 사용자 유효성 검사
• 사용자 유효성 검사는 Membership 클래스에서 제공하는
ValidateUser() 메서드를 사용합니다.
메서드
설명
ValidateUser(string
username, string
password)
매개변수로 정의된 username, password를 통해
사용자가 유효한지(존재하는지)를 멤버 자격 공급자
에서 지정한 데이터 소스에서 체크하고 그 결과를
bool 형식의 값으로 반환 합니다.
[ValidateUser() 메서드]
www.hanbitbook.co.kr
멤버 자격 API와 역할 관리자
RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line
• 이 메서드는 로그인 시 사용자가 입력한 사용자 이름(ID)과
암호가 유효한지를 판단할 때 사용할 수 있습니다.
if (Membership.ValidateUser(txtUserName.Text, txtPassword.Text))
{
FormsAuthentication.RedirectFromLoginPage(txtUserName.Text,
false);
}
else
{
Response.Write("아이디가 존재하지 않거나 암호가 정확하지 않습니다.");
}
www.hanbitbook.co.kr
멤버 자격 API와 역할 관리자
RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line
 사용자 삭제
• 사용자 삭제는 Membership 클래스에서 제공하는 DeleteUser() 메서드를
사용합니다. DeleteUser() 메서드는 사용자 삭제 성공 여부를 bool 형식
의 값으로 반환합니다.
메서드
설명
DeleteUser(string username)
매개변수로 정의된 사용자를 삭제 합니다.
[DeleteUser() 메서드]
• 이 메서드는 회원 탈퇴 페이지 등에서 사용될 수 있습니다.
if (Membership.DeleteUser(User.Identity.Name))
{
FormsAuthentication.SignOut();
Response.Redirect("~/Default.aspx");
}
else
{
lblResult.Text = "회원 삭제가 정상적으로 이루어지지 않았습니다.";
}
www.hanbitbook.co.kr
멤버 자격 API와 역할 관리자
RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line
<Exercise 13-2> 멤버 자격 API를 이용한 사용자 삭제
멤버 자격 API를 이용하여 현재 생성되어 있는 모든 사용자의 이름을
드롭다운리스트에 바인딩하고 <선택 회원 삭제> 버튼 클릭 시 드롭다
운리스트에서 선택한 사용자를 삭제하는 페이지를 구현해 봅시다.
힌트 : Membership 클래스의 GetAllUsers() 정적 메서드는
MembershipUserCollection 개체를 반환합니다.
www.hanbitbook.co.kr
멤버 자격 API와 역할 관리자
RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line
 역할 관리자(Role Manager)
 역할 관리자는 ASP.NET 2.0에서 제공해주는 역할
관리자 API와 역할 관리 공급자가 서로 유기적으로
동작하여 역할 관리 프로세스와 관련된 작업을 자동
으로 처리해주는 기능을 말합니다.
 역할 관리자도 다음과 같이 공급자 모델 디자인 패
턴(provider model design pattern)을 그대로 따릅
니다.
www.hanbitbook.co.kr
멤버 자격 API와 역할 관리자
RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line
 기본 역할 공급자(AspNetSqlRoleProvider)는 Machine.config
파일에 정의되어 있습니다. 하지만 멤버 자격이 기본적으로 사
용가능 하도록 설정 되어 있는 반면, 역할 관리자는 기본적으
로 사용할 수 없도록 설정 되어 있습니다. 그러므로 역할 관리
자를 사용하기 위해서는 반드시 구성 파일의 <roleManager>
요소의 enabled 특성을 True로 지정해야 합니다.
www.hanbitbook.co.kr
멤버 자격 API와 역할 관리자
RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line
 다음은 Web.config 파일에서 <roleManager> 요소의 enabled
특성을 True로 지정하여 역할 관리자를 사용 하도록 설정하고,
새로운 역할 공급자(MyAspNetSqlRoleProvider)를 추가한 후
새로 추가한 역할 공급자를 해당 웹 응용 프로그램에서 기본
역 할
공 급 자 로
지 정 하 는
(defaultProvider="MyAspNetSqlRoleProvider") 구문입니다.
<roleManager enabled="true"
defaultProvider="MyAspNetSqlRoleProvider">
<providers>
<add name="MyAspNetSqlRoleProvider"
type="System.Web.Security.SqlRoleProvider"
connectionStringName="LocalSqlServer" />
</providers>
</roleManager>
www.hanbitbook.co.kr
멤버 자격 API와 역할 관리자
RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line
 참고로 역할 관리자는 역할 관리자 API만 지원할 뿐
역할 관리자와 관련된 서버 컨트롤은 지원하지 않습
니다.
 역할 관리자 API에서 핵심이 되는 클래스는 바로
Roles 클래스 입니다.
-
Roles 클래스
 Roles 클래스를 사용하면 역할 생성, 역할에 사용자
추가 및 삭제 등의 프로세스를 손쉽게 처리할 수 있
습니다.
www.hanbitbook.co.kr
멤버 자격 API와 역할 관리자
RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line
 역할 추가 및 삭제
• 역 할 추 가 및 삭 제 는 Roles 클 래 스 에 서 제 공 하 는
CreateRole(), DeleteRole() 메서드를 사용합니다.
메서드
설명
CreateRole(string
roleName)
매개변수로 정의된 역할 이름(roleName)으로 새로
운 역할을 생성 합니다.
DeleteRole(string
roleName)
매개변수로 정의된 역할을 삭제합니다.
[CreateRole(), DeleteRole() 메서드]
• 이 메서드들은 역할을 관리하는 관리자 페이지에서 사용될
수 있습니다.
Roles.CreateRole(“SpecialMember”); // SpecialMember 라는 역할 생성
Roles.DeleteRole(“SpecialMember”); // SpecialMember 라는 역할 삭제
www.hanbitbook.co.kr
멤버 자격 API와 역할 관리자
RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line
 역할에 사용자 추가 또는 삭제
• 역할에 사용자를 추가하기 위해서는 다음과 같은 메서드를
사용합니다.
메서드
설명
AddUserToRole(string
username, string roleName)
첫번째 매개변수로 정의된 사용자를 두번째
매개변수로 정의된 역할에 추가합니다.
AddUsersToRole(string[]
usernames, string roleName)
첫번째 매개변수로 정의된 사용자들을 두번째
매개변수로 정의된 역할에 추가합니다.
AddUserToRoles(string
username, string[] roleNames)
첫번째 매개변수로 정의된 사용자를 두번째
매개변수로 정의된 역할들에 추가합니다.
AddUsersToRoles(string[]
usernames, string[]
roleNames)
첫번째 매개변수로 정의된 사용자들을 두번째
매개변수로 정의된 역할들에 추가합니다.
[역할에 사용자를 추가하는 메서드]
www.hanbitbook.co.kr
멤버 자격 API와 역할 관리자
RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line
• 역할에서 특정 사용자를 삭제하기 위해서는 아래와 다음과
같은 메서드를 사용합니다.
메서드
설명
RemoveUserFromRole(string
username, string roleName)
첫번째 매개변수로 정의된 사용자를 두번째
매개변수로 정의된 역할에서 삭제합니다.
RemoveUsersFromRole(string[]
usernames, string roleName)
첫번째 매개변수로 정의된 사용자들을 두번
째 매개변수로 정의된 역할에서 삭제합니다.
RemoveUserFromRoles(string
username, string[] roleNames)
첫번째 매개변수로 정의된 사용자를 두번째
매개변수로 정의된 역할들에서 삭제합니다.
RemoveUsersFromRoles(string[]
usernames, string[] roleNames)
첫번째 매개변수로 정의된 사용자들을 두번
째 매개변수로 정의된 역할들에서 삭제합니
다.
[역할에 사용자를 삭제하는 메서드]
www.hanbitbook.co.kr
멤버 자격 API와 역할 관리자
RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line
• 이 메서드들 또한 역할을 관리하는 관리자 페이지에서 사
용될 수 있습니다.
Roles.AddUserToRole(“user1”, “SpecialMember”);
Roles. RemoveUserFromRole(“user1”, “SpecialMember”);
www.hanbitbook.co.kr
이것만은 알고 갑시다
RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line
1. 각 문장에 어울리는 적절한 용어를 상자 안에서 골라 보세요.
폼 기반 인증
역할
역할 관리자
(1)
(2)
(3)
(4)
(5)
(6)
(7)
(8)
멤버 자격
공급자 모델 디자인 패턴
인증
권한 부여
aspnet_regsql.exe
( )은 특정 사용자가 유효한 사용자인지를 판단하는 과정을 의미합니다.
( )는 특정 사용자가 웹 사이트에서 제공하는 콘텐츠에 접근 가능한지를 판단하는 과정을
의미합니다.
( )은 HTTP 쿠키와 HTML 폼을 이용하는 인증 방식입니다. 또한 이 인증 방식은 ASP.NET
에서 제공하는 인증 관련 API를 사용할 수 있기 때문에 인증 처리를 쉽게 할 수 있다는 장점
이 있습니다.
( )은 보안면에서 동일한 권한을 가진 그룹을 의미하며 여기에 여러 사용자들을 포함시킬
수 있습니다.
( )은 ASP.NET 2.0에서 제공해주는 로그인 컨트롤, 멤버 자격 API, 멤버 자격 공급자
(membership provider)가 서로 유기적으로 동작하여 보안 프로세스와 관련된 작업을 자동
으로 처리해주는 서비스를 말합니다.
( )은 각 데이터 소스에 맞는 공급자와 해당 API를 통해 관련 기능을 제어하는 패턴을 말
합니다.
( )는 SQL Server 공급자에서 사용하는 SQL Server 데이터베이스를 설치하는 도구로서
마법사 형식 또는 명령 프롬프트 형식을 제공합니다.
( )는 ASP.NET 2.0에서 제공해주는 역할 관리자 API와 역할 관리 공급자가 서로 유기적
으로 동작하여 역할 관리 프로세스와 관련된 작업을 자동으로 처리해주는 기능을 말합니다.
www.hanbitbook.co.kr
이것만은 알고 갑시다
RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line
2. 다음의 구성 파일을 수정하여 인증 방식을 폼 기반 인증으로 변경해 보세
요.
<configuration>
<system.web>
<authentication mode="Windows" />
</system.web>
</configuration>
3. 다음과 같은 구성 파일의 <authorization> 요소에서 Admins 역할을 가진
사용자들만 접근을 허용하고 나머지 모든 사용자들의 접근을 거부 하도록
빈칸을 채워 구문을 완성해 봅시다.
<authorization>
(
)
</authorization>
4. 로그인 컨트롤을 모두 나열해 보세요(총 7개).
www.hanbitbook.co.kr