인증 (authentication) 과 권한 부여 (authorization) 로그인 컨트롤 사용하기 멤버...

88
인증 (Authentication) 과 권한 부여 (Authorization) 로그인 컨트롤 사용하기 멤버 자격 API 와 역할 관리자 13 보안 (Security)

Upload: ariana-snider

Post on 15-Mar-2016

117 views

Category:

Documents


5 download

DESCRIPTION

13 보안 (Security). 인증 (Authentication) 과 권한 부여 (Authorization) 로그인 컨트롤 사용하기 멤버 자격 API 와 역할 관리자. 인증과 권한 부여. 인증과 권한 부여의 개념 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 인증 (Authentication) 과 권한 부여 (Authorization) 로그인 컨트롤 사용하기 멤버 자격  API 와 역할 관리자

인증 (Authentication) 과 권한 부여 (Authorization)로그인 컨트롤 사용하기멤버 자격 API 와 역할 관리자

13 보안 (Security)

Page 2: 인증 (Authentication) 과 권한 부여 (Authorization) 로그인 컨트롤 사용하기 멤버 자격  API 와 역할 관리자

RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line

www.hanbitbook.co.kr

인증과 권한 부여의 개념 인증과 권한 부여의 개념을 설명하기 위해 회원제 웹 사이트를 예로

들어보겠습니다 . 회원제 웹 사이트에서 회원은 회원에게만 공개되는 콘텐츠( 정보 또는 기능 ) 에 접근하기 위해 반드시 아이디와 암호를 입력하는 로그인 과정을 거치는데 이러한 과정이 바로 인증 (authentication) 입니다 . 즉 , 인증은 특정 사용자가 유효한 사용자인지를 판단하는 과정을 의미합니다 .

또한 인증 받았거나 ( 인증된 사용자 ) 인증 받지 않은 사용자 ( 익명 사용자 )는 웹 사이트의 정책에 따라 콘텐츠에 접근 할 수 있는 자격이 일부 제한될 수 있습니다 . 예를 들어 자유 게시판의 글을 읽는 것은 인증된 사용자 또는 익명 사용자 모두 가능합니다 . 하지만 글을 쓰는 것은 인증된 사용자만 가능하게 해두는 것이 보통입니다 . 또한 공지 게시판 같은 경우는 인증된 사용자 및 익명 사용자 모두 글을 읽을 수는 있지만 인증된 사용자라고 하더라도 글을 쓸 수는 없습니다 . 공지 게시판에 글을 쓸 수 있는 사용자는 관리자 계정을 가진 사용자로 제한하는 것이 보통입니다 . 이렇게 웹 사이트에 존재하는 모든 사용자들은 웹 사이트 정책에 따라 그 부류 별로 콘텐츠에 대한 접근이 제한 되는데 이것을 권한 부여 (authorization) 라고 합니다 . 즉 , 권한 부여는 특정 사용자가 웹 사이트에서 제공하는 콘텐츠 ( 정보 또는 기능 ) 에 접근 가능한지를 판단하는 과정을 의미합니다 .

회원제로 운영되는 모든 웹 사이트는 이렇게 인증과 권한 부여를 기초로 해서 보안 메커니즘을 구성합니다 .

인증과 권한 부여

Page 3: 인증 (Authentication) 과 권한 부여 (Authorization) 로그인 컨트롤 사용하기 멤버 자격  API 와 역할 관리자

RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line

www.hanbitbook.co.kr

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 인증 방식 ]

Page 4: 인증 (Authentication) 과 권한 부여 (Authorization) 로그인 컨트롤 사용하기 멤버 자격  API 와 역할 관리자

RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line

www.hanbitbook.co.kr

< 여기서 잠깐 > 쿠키 (cookie) 란 ?쿠키는 사전적 의미로 ‘비스킷’ , ‘ 납작한 과자’ 등의 뜻을 가지지만 컴퓨터 용어로 사용될 때는 인터넷 접속 시 사용자 정보를 클라이언트 PC 에 저장하는 파일의 의미로 사용됩니다 . 그러므로 쿠키를 사용하면 각 사용자의 정보를 저장할 수 있을 뿐만 아니라 인증과 관련된 정보도 함께 저장할 수 있습니다 . 쿠키는 각 Windows 계 정 별 로 다 음 과 같 은 위 치 에 .txt 파일로 저장됩니다 .

인증과 권한 부여

C:\Documents and Settings\User\Cookies\

Page 5: 인증 (Authentication) 과 권한 부여 (Authorization) 로그인 컨트롤 사용하기 멤버 자격  API 와 역할 관리자

RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line

www.hanbitbook.co.kr

ASP.NET 1.x 에서는 주로 사용자 지정 인증 방식을 사용해서 인증 처리를 했던 것이 사실 입니다 . 이것은 물론 , 인증 처리 코드를 직접 작성해야 하는 어려움도 있지만 웹 사이트의 인증과 관련된 부분을 세밀하게 제어할 수 있는 장점이 있었기 때문입니다 . 하지만 이 책에서는 ASP.NET 2.0 에서 제공해주는 새로운 인증 관련 클래스 및 로그인 컨트롤을 사용하기 위해 폼 기반 인증을 사용할 것입니다 .

인증과 권한 부여

Page 6: 인증 (Authentication) 과 권한 부여 (Authorization) 로그인 컨트롤 사용하기 멤버 자격  API 와 역할 관리자

RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line

www.hanbitbook.co.kr

다 음 은 ASP.NET 2.0 에 새 로 추 가 된 로 그 인 컨트롤의 모습입니다 .

인증과 권한 부여

Page 7: 인증 (Authentication) 과 권한 부여 (Authorization) 로그인 컨트롤 사용하기 멤버 자격  API 와 역할 관리자

RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line

www.hanbitbook.co.kr

폼 기반 인증 폼 기반 인증은 위에서도 간단히 설명 했듯이 쿠키와

ASP.NET 에서 제공해주는 인증 관련 API 를 사용해서 인증 처리를 하는 것을 말합니다 . 다음은 폼 기반 인증의 처리과정을 도식화한 그림입니다 .

인증과 권한 부여

Page 8: 인증 (Authentication) 과 권한 부여 (Authorization) 로그인 컨트롤 사용하기 멤버 자격  API 와 역할 관리자

RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line

www.hanbitbook.co.kr

접근이 제한된 페이지를 사용자가 요청하게 되면 우선 , 인증 쿠키 존재 여부를 확인해서 인증 과정을 거칩니다 . 만약 인증 쿠키가 존재한다면 이번에는 페이지 접근 권한 여부를 묻게 되고 페이지 접근 권한이 있다면 최종적으로 요청한 페이지에 접근하게 됩니다 . 하지만 인증 과정에서 인증 쿠키가 존재하지 않는다면 우리가 흔히 웹 사이트에서 볼 수 있는 로그인 페이지로 이동하여 아이디 및 암호를 입력하고 인증 과정을 거치게 됩니다 . 유효한 아이디와 암호라면 클라이언트 PC 에 인증 쿠키가 자동으로 생성되고 인증 처리가 완료됩니다 . 인증 처리가 완료 되면 다시 사용자의 권한 여부가 체크되고 요청한 페이지에 대한 접근 여부를 판단 하게 됩니다 . 폼 기반 인증을 사용하기 위해서는 먼저 다음과 같이 구성 파일을 수정해 주어야 합니다 .

인증과 권한 부여

Page 9: 인증 (Authentication) 과 권한 부여 (Authorization) 로그인 컨트롤 사용하기 멤버 자격  API 와 역할 관리자

RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line

www.hanbitbook.co.kr

Web.config 파일을 생성하면 기본적으로 <authentication> 요소의 mode 특성이 Windows 로 지정 됩니다 . 즉 , ASP.NET 의 기본 인증은 윈도우 기반 인증이라는 뜻이며 이것을 Forms 로 수정하면 폼 기반 인증으로 변경할 수 있습니다 . mode 특성에는 Windows, Forms 외에 Passport 및 None 값을 지정할 수 있으며 이것은 위의 표에서 소개한 인증 방식과 일치합니다 . 참고로 None 은 사용자 지정 인증 방식을 의미합니다 .

인증과 권한 부여<configuration> <system.web> <authentication mode="Forms" /> </system.web></configuration>

Page 10: 인증 (Authentication) 과 권한 부여 (Authorization) 로그인 컨트롤 사용하기 멤버 자격  API 와 역할 관리자

RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line

www.hanbitbook.co.kr

[ 예제 13-1] 폼 기반 인증 예제

인증과 권한 부여

Page 11: 인증 (Authentication) 과 권한 부여 (Authorization) 로그인 컨트롤 사용하기 멤버 자격  API 와 역할 관리자

RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line

www.hanbitbook.co.kr

< 여기서 잠깐 > API(Application Interface) 란 ?API 는 응용 프로그램 인터페이스라고도 하며 특정 응용 프 로 그 램 의 기 능 을 손 쉽 게 이 용 할 수 있 도 록 해 주 는 인터페이스를 의미합니다 . API 는 메서드 또는 속성 등의 형태로 제공되는 것이 보통입니다 .

인증과 권한 부여

Page 12: 인증 (Authentication) 과 권한 부여 (Authorization) 로그인 컨트롤 사용하기 멤버 자격  API 와 역할 관리자

RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line

www.hanbitbook.co.kr

구 성 파 일 의 <authentication> 요 소 하 위 에 있 는 <forms> 요 소 는 폼 기 반 인 증 의 세 세 한 제어를 위해 여러 가지 특성들을 제공합니다 . 다음은 <forms> 요소의 주요 특성입니다 .

인증과 권한 부여

특성 설명cookieless 인증 쿠키의 사용 여부 및 동작을 정의합니다 .

UserCookies: 장치에 관계없이 쿠키를 항상 사용합니다 .UserUrl: 쿠키를 사용하지 않고 인증 정보를 URL 에 저장합니다 .AutoDetect: 브라우저에서 쿠키를 지원하면 쿠키를 사용하고 그렇지 않으면 쿠키를 사용하지 않습니다 .UseDeviceProfile( 기본값 ): 장치 프로필에서 쿠키를 지원하면 쿠키를 사용하고 , 그렇지 않으면 쿠키를 사용하지 않습니다 .

default 인증 후 리디렉션할 기본 URL 을 지정합니다 . 기본값은 Default.aspx 입니다 .

domain 쿠키를 공유할 수 있도록 하는 도메인을 지정 합니다 . 기본값은 빈 문자열 (“”) 입니다 . 예를 들어 , 이 특성에 dotnetpro.co.kr 이라는 값을 지정하면 , test1.dotnetpro.co.kr, test2.dotnetpro.co.kr 등과 같은 동일한 도메인 내에서 쿠키를 공유할 수 있습니다 .

loginUrl 유효한 인증 쿠키가 없을 때 리디렉션할 URL 을 지정합니다 . 기본값은 Login.aspx 입니다 .

New in 2.0

New in 2.0

New in 2.0

Page 13: 인증 (Authentication) 과 권한 부여 (Authorization) 로그인 컨트롤 사용하기 멤버 자격  API 와 역할 관리자

RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line

www.hanbitbook.co.kr

인증과 권한 부여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 특성에서 지정한 시간만큼 인증 쿠키 만료 시간을 다시 갱신합니다 .

Page 14: 인증 (Authentication) 과 권한 부여 (Authorization) 로그인 컨트롤 사용하기 멤버 자격  API 와 역할 관리자

RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line

www.hanbitbook.co.kr

권한 부여 폼 기반 인증에서 권한 부여는 Web.config 파일의

<authorization> 요소에서 지정합니다 . <authorization> 요소는 접근 거부 및 허가를 지정하는 다음과 같은 하위 요소를 가집니다 .

인증과 권한 부여False: 상대 (sliding) 만료를 사용하지 않도록 지정합니다 . 즉 , 인증 쿠키는 사용자의 후속 요청에 상관없이 time 특성에서 지정한 만료 시간 후에 바로 만료됩니다 .

[<forms> 요소의 주요 특성 ]

- <deny>- <allow>

Page 15: 인증 (Authentication) 과 권한 부여 (Authorization) 로그인 컨트롤 사용하기 멤버 자격  API 와 역할 관리자

RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line

www.hanbitbook.co.kr

또한 <deny>, <allow> 요소는 users, roles라는 특성을 제공하는데 이 특성들은 각각 사용자(users) 와 역할 (roles) 별 접근 권한을 지정하는데 사 용 됩 니 다 . 특 히 , 사 용 자 (users) 를 지 정 할 때에는 다음과 같은 특수 문자를 사용할 수 있습니다 .

인증과 권한 부여

사용자 이름 설명* 모든 사용자를 의미합니다 .( 익명 사용자 포함 ) ? 익명 사용자를 의미합니다 .

[<deny>, <allow> 요소의 users 특성에 사용되는 특수 문자 ]

Page 16: 인증 (Authentication) 과 권한 부여 (Authorization) 로그인 컨트롤 사용하기 멤버 자격  API 와 역할 관리자

RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line

www.hanbitbook.co.kr

< 여기서 잠깐 > 역할 (role) 이란 ?역할은 보안면에서 동일한 권한을 가진 그룹을 의미하며 여기에 여러 사용자들을 포함시킬 수 있습니다 . 이렇게 역할을 만드는 이유는 각 사용자 별로 권한을 주는 것 보다 특정 역할을 만들고 이 역할 에 권 한 을 주 어 이 역할 에 포함된 모 든 사용자들에게 일괄적으로 권한을 부여 하는 것이 좀더 효율적이기 때문입니다 .

인증과 권한 부여

Page 17: 인증 (Authentication) 과 권한 부여 (Authorization) 로그인 컨트롤 사용하기 멤버 자격  API 와 역할 관리자

RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line

www.hanbitbook.co.kr

다 음 은 모 든 익 명 사 용 자 (?) 를 웹 사 이 트 에 접근하지 못하게 (<deny>) 하는 구문입니다 .

다 음 은 아 이 디 ( 이 름 ) 가 ‘ aaaa’, ‘bbbb’ 인 사용자만 접근을 허용 (<allow>) 하고 나머지 모든 사 용 자 들 (*) 의 접 근 을 거 부 (<deny>) 하 는 구문입니다 .

인증과 권한 부여

<authorization> <deny users="?"/></authorization>

<authorization> <allow users=”aaaa,bbbb”/> <deny users="*"/></authorization>

Page 18: 인증 (Authentication) 과 권한 부여 (Authorization) 로그인 컨트롤 사용하기 멤버 자격  API 와 역할 관리자

RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line

www.hanbitbook.co.kr

다음은 ‘ Admins’ 라는 역할을 가진 사용자들만 접근을 허용 (<allow>) 하고 나머지 모든 사용자들(*) 의 접근을 거부 (<deny>) 하는 구문입니다 .

이와 같이 <deny>, <allow> 요소와 users, roles 특성을 사용하면 웹 응용 프로그램 단위로 영향을 미치는 권한을 여러분이 원하는 대로 설정할 수 있습니다 .

인증과 권한 부여

<authorization> <allow roles=”Admins”/> <deny users="*"/></authorization>

Page 19: 인증 (Authentication) 과 권한 부여 (Authorization) 로그인 컨트롤 사용하기 멤버 자격  API 와 역할 관리자

RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line

www.hanbitbook.co.kr

그렇다면 , 특정 페이지에만 권한 부여가 적용되도록 하려면 어떻게 해야 할까요 ? 그것은 다음과 같이 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>

Page 20: 인증 (Authentication) 과 권한 부여 (Authorization) 로그인 컨트롤 사용하기 멤버 자격  API 와 역할 관리자

RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line

www.hanbitbook.co.kr

위처럼 <location> 요소의 path 특성을 사용하면 특정 페이지만 권한 부여를 할 수 있습니다 . 참고로 <location> 요소 위쪽에 있는 부분 (<deny users=”?”/>) 은 웹 사이트 전체에 적용되는 권한 부분입니다 . 위의 구문은 모든 웹 페이지에서 익명 사용자의 접근을 거부 하며 , 특히 SuperAdminPage.aspx 페이지에서는 SuperAdmins 역할을 가진 사용자만 접근 가능하도록 지정합니다 .

인증과 권한 부여

Page 21: 인증 (Authentication) 과 권한 부여 (Authorization) 로그인 컨트롤 사용하기 멤버 자격  API 와 역할 관리자

RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line

www.hanbitbook.co.kr

또한 <location> 요소의 path 특성에 특정 폴더를 지정하여 다음과 같이 폴더 하위에 있는 모든 페이지에 일괄적으로 권한 부여를 할 수 있습니다 .

위의 구문은 secured 폴더 하위에 있는 모든 페이지에 SubAdmins 역할을 가진 사용자만 접근 가능하도록 지정합니다 .

인증과 권한 부여

<location path=”secured”> <system.web> <authorization> <allow roles=”SubAdmins”/> <deny users=”*”/> </authorization> </system.web></location>

Page 22: 인증 (Authentication) 과 권한 부여 (Authorization) 로그인 컨트롤 사용하기 멤버 자격  API 와 역할 관리자

RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line

www.hanbitbook.co.kr

멤버 자격 (Membership) 멤버 자격은 ASP.NET 2.0 에서 제공해주는 로그인 컨 트 롤 , 멤 버 자 격 API, 멤 버 자 격 공 급 자

(membership provider) 가 서 로 유 기 적 으 로 동작하 여 보안 프로세스 ( 사용자 생성 , 로그인 , 로그아웃 등등 ) 와 관련된 작업을 자동으로 처리해주는 기능을 말합니다 .

로그인 컨트롤 사용하기New in 2.0

Page 23: 인증 (Authentication) 과 권한 부여 (Authorization) 로그인 컨트롤 사용하기 멤버 자격  API 와 역할 관리자

RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line

www.hanbitbook.co.kr

다음은 ASP.NET 2.0 의 멤버 자격의 구조를 나타낸 그림입니다 .

로그인 컨트롤 사용하기

Page 24: 인증 (Authentication) 과 권한 부여 (Authorization) 로그인 컨트롤 사용하기 멤버 자격  API 와 역할 관리자

RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line

www.hanbitbook.co.kr

위의 그림을 보면 멤버 자격 공급자가 멤버 자격 API 와 데이터 소스 사이에 위치해 있는 것을 볼 수 있습니다 . 이 위치에서 멤버 자격 공급자는 보안 프로세스와 관련된 작업을 자동으로 처리합니다 . 개발자는 멤버 자격 API 를 사용하여 프로그래밍 방식으로 멤버 자격을 사용할 수 있고 내부적으로 멤버 자격 API 를 사용하는 로그인 컨트롤을 통해 어떠한 코드 작성 없이 멤버 자격을 사용할 수 있습니다 . 각 데이터 소스에는 그에 맞는 멤버 자 격 공 급 자 가 연 결 되 며 ASP.NET 2.0 은 기본적으로 SQL Server 와 연결되는 SqlMembershipProvider 를 사용합니다 .

로그인 컨트롤 사용하기

Page 25: 인증 (Authentication) 과 권한 부여 (Authorization) 로그인 컨트롤 사용하기 멤버 자격  API 와 역할 관리자

RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line

www.hanbitbook.co.kr

이렇게 공급자를 사용하는 멤버 자격의 구조는 우리가 12 장에서 공부했던 사이트 탐색이 사이트 맵 공급자를 사용하는 구조와 완 전 히 동 일 합 니 다 . 다 음 은 사 이 트 탐 색 의 구 조 를 나 타 낸 그림입니다 .

로그인 컨트롤 사용하기

Page 26: 인증 (Authentication) 과 권한 부여 (Authorization) 로그인 컨트롤 사용하기 멤버 자격  API 와 역할 관리자

RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line

www.hanbitbook.co.kr

지금까지 설명한 사이트 탐색과 멤버 자격 외에 앞으로 공부할 역할 관 리자 , 프로필 , 개인 설정 등 등의 기능들도 모두 위의 그림들과 동일한 구조와 패턴을 가지는데 , 이처럼 각 데이터 소스에 맞는 공급자와 해당 API 를 통해 관련 기능을 제어하는 패턴을 공급자 모 델 디 자 인 패 턴 (provider model design pattern) 이라고 합니다 . 다음은 공급자 모델 디자인 패턴을 나타낸 그림입니다 .

로그인 컨트롤 사용하기

Page 27: 인증 (Authentication) 과 권한 부여 (Authorization) 로그인 컨트롤 사용하기 멤버 자격  API 와 역할 관리자

RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line

www.hanbitbook.co.kr

로그인 컨트롤 사용하기

Page 28: 인증 (Authentication) 과 권한 부여 (Authorization) 로그인 컨트롤 사용하기 멤버 자격  API 와 역할 관리자

RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line

www.hanbitbook.co.kr

위에서 설명한 사이트 탐색 , 멤버 자격은 서로 기능만 다를 뿐 모두 공급자 모델 디자인 패턴을 그대로 따른다는 것을 알 수 있습니다 . 앞으로 공부할 역할 관리자 , 프로필 , 개인 설정 등의 기능들도 공급자 모델 디자인 패턴을 그대로 따르므로 위 그림의 구조를 잘 기억해 두 기 바랍니다 .

그럼 , 다시 본론으로 돌아가서 멤버 자격에 대해 계속적으로 알아봅시다 . 기본적으로 정의되어 있는 멤버 자격 공급자는 Machine.config 파일 (필자의 경우 C:\WINNT\Microsoft.NET\Framework\v2.0.xxxxx\CONFIG\Machine.config 경로에 위치 )에서 확인할 수 있으며 다음과 같이 정의되어 있습니다 .

로그인 컨트롤 사용하기

Page 29: 인증 (Authentication) 과 권한 부여 (Authorization) 로그인 컨트롤 사용하기 멤버 자격  API 와 역할 관리자

RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line

www.hanbitbook.co.kr

로그인 컨트롤 사용하기<configuration> <connectionStrings> <add name="LocalSqlServer" connectionString="data source=.\SQLEXPRESS;Integrat

ed 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.SqlMemb

ershipProvider, 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>

Page 30: 인증 (Authentication) 과 권한 부여 (Authorization) 로그인 컨트롤 사용하기 멤버 자격  API 와 역할 관리자

RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line

www.hanbitbook.co.kr

위 에 서 보 는 것 처 럼 멤 버 자 격 공 급 자(<membership>) 를 정의하는 <add> 요소는 보안 프로세스와 관련된 여러 가지 특성들을 포함하고 있 습 니 다 . 다 음 은 멤 버 자 격 공 급 자 를 정 의 하 는 <add> 요소의 주요 특성입니다 .

로그인 컨트롤 사용하기

속성 설명name 공급자의이름을지정합니다 .type MembershipProvider 추상 기본클래스를 구현하는

형식을 지정합니다 .

connectionStringName <connectionStrings> 요소에 정의된연결문자열의 이름을 지정합니다 . 즉 , 멤버 자격 공급자에 사용할

연결문자열을 지정합니다 .

enablePasswordRetrieval 멤버자격에서암호찾기를지원하는지여부를지정합니다 . [True, False(기본값 )] 이특성을True 로지정하면암호찾기를지원합니다 .

Page 31: 인증 (Authentication) 과 권한 부여 (Authorization) 로그인 컨트롤 사용하기 멤버 자격  API 와 역할 관리자

RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line

www.hanbitbook.co.kr

로그인 컨트롤 사용하기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 해시 알고리즘을 사용하여 단방향으로 암호화됩니다 .

Page 32: 인증 (Authentication) 과 권한 부여 (Authorization) 로그인 컨트롤 사용하기 멤버 자격  API 와 역할 관리자

RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line

www.hanbitbook.co.kr

로그인 컨트롤 사용하기maxInvalidPasswordAttempts 허용되는 잘못된 암호 또는 보안 대답 시도 횟수를

지정합니다 . 만약 이 횟수가 구성된 값과 일치하면 해당 계정은 자동으로 차단됩니다 . 기본값은 5입니다 .

minRequiredPasswordLength 암호에 필요한 최소 문자 수를 지정합니다 . 기본값은 1 입니다 . 이 특성은 0보다 작거나 128보다 큰 값으로 설정할 수 없습니다 .

minRequiredPasswordLength 암호에 필요한 최소 문자 수를 지정합니다 . 기본값은 1 입니다 . 이 특성은 0보다 작거나 128보다 큰 값으로 설정할 수 없습니다 .

minRequiredNonalphanumericCharacters

유효한 암호에 포함되어야 할 최소 특수 문자 (!, @, ?, $ 등등 ) 수를 지정합니다 . 기본값은 1입니다 . 이 특성은 0보다 작거나 128 또는 minRequiredPasswordLength 값보다 큰 값으로 설정할 수 없습니다 .

[<forms> 요소의 주요 특성 ]

Page 33: 인증 (Authentication) 과 권한 부여 (Authorization) 로그인 컨트롤 사용하기 멤버 자격  API 와 역할 관리자

RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line

www.hanbitbook.co.kr

또한 멤버 자격에서 여러분이 한가지 더 알고 있어야 할 부분이 있습니다 . 그것은 Machine.config 파일에 기본적으로 정의되어 있는 멤버 자격 공급자를 보면 , 이 공급자가 SQL Server 2005 Express(SQL Server Express) 를 사용한다는 것입니다 . 이것은 Machine.config 파일에서 멤버 자격 공급자가 사용하는 연결 문자열 (LocalSqlServer) 의 특 성 중 connectionString 특 성 의 값 을 보 면 알 수 있습니다 (data source=.\SQLEXPRESS).

로그인 컨트롤 사용하기

<connectionStrings> <add name="LocalSqlServer" connectionString="data sou

rce=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true" providerName="System.Data.SqlClient" />

</connectionStrings>

Page 34: 인증 (Authentication) 과 권한 부여 (Authorization) 로그인 컨트롤 사용하기 멤버 자격  API 와 역할 관리자

RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line

www.hanbitbook.co.kr

즉 , 로 그 인 컨트롤 또 는 멤버 자 격 API 를 사용하여 보안 프로세스를 구현할 경우 사용자와 관련된 정보의 저장 및 참조는 기본적으로 Machine.config 파일의 멤버 자격 공급자 (AspNetSqlMembershipProvider) 에서 사용하는 연결 문자열 (LocalSqlServer) 에서 지정한 DBMS 인 SQL Server 2005 Express 에서 이루어진다는 뜻입니다 .

로그인 컨트롤 사용하기

Page 35: 인증 (Authentication) 과 권한 부여 (Authorization) 로그인 컨트롤 사용하기 멤버 자격  API 와 역할 관리자

RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line

www.hanbitbook.co.kr

< 여기서 잠깐 > SQL Server 2005 ExpressSQL 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

Page 36: 인증 (Authentication) 과 권한 부여 (Authorization) 로그인 컨트롤 사용하기 멤버 자격  API 와 역할 관리자

RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line

www.hanbitbook.co.kr

그 럼 본 격 적 으 로 로 그 인 컨 트 롤 에 대 해 공부해보겠습니다 . 다음은 우리가 공부할 로그인 컨트롤을 정리한 표입니다 .

로그인 컨트롤 사용하기

로그인 컨트롤 설명CreateUserWizard 사용자 정보를 입력 받아 새로운 사용자를 만들어 줍니다 .

Login 로그인 기능을 제공합니다 .

LoginView 인증된 사용자와 익명 사용자에게 보여줄 화면을 구분하여 나타냅니다 .

LoginName 인증된 사용자의 이름을 표시합니다 .

LoginStatus 인증된 사용자에게는 로그아웃 링크를 표시하고 익명 사용자에게는 로그인 링크를 표시합니다 .

ChangePassword 암호 수정 기능을 제공합니다 .

PasswordRecovery 암호 찾기 기능을 제공합니다 .

[ 로그인 컨트롤 ]

Page 37: 인증 (Authentication) 과 권한 부여 (Authorization) 로그인 컨트롤 사용하기 멤버 자격  API 와 역할 관리자

RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line

www.hanbitbook.co.kr

CreateUserWizard 컨트롤 CreateUserWizard 컨트롤은 사용자 정보를 입력

받아 새로운 사용자를 만들어 주는 컨트롤입니다 . 다음은 CreateUserWizard 컨트롤을 웹 폼 위로 끌어다 놓았을 때의 기본적인 모습입니다 .

로그인 컨트롤 사용하기New in 2.0

Page 38: 인증 (Authentication) 과 권한 부여 (Authorization) 로그인 컨트롤 사용하기 멤버 자격  API 와 역할 관리자

RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line

www.hanbitbook.co.kr

로그인 컨트롤 사용하기<asp:CreateUserWizard ID="CreateUserWizard1" runat="server" > <WizardSteps> <asp:CreateUserWizardStep ID="CreateUserWizardStep1" runat="serve

r"> </asp:CreateUserWizardStep> <asp:CompleteWizardStep ID="CompleteWizardStep1" runat="server"> </asp:CompleteWizardStep> </WizardSteps></asp:CreateUserWizard>

Page 39: 인증 (Authentication) 과 권한 부여 (Authorization) 로그인 컨트롤 사용하기 멤버 자격  API 와 역할 관리자

RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line

www.hanbitbook.co.kr

<asp:CreateUserWizard> 컨트롤 선언 구문을 보면 예전에 7장에서 배웠던 Wizard 컨트롤과 그 형식이 매우 유사하다는 것을 알 수 있습니다 . 이것은 CreateUserWizard 컨트롤이 Wizard 컨트롤을 상속 (inherit) 받아 그 기능을 확장 했기 때문이며 사용법도 Wizard 컨트롤과 매우 비슷합니다 .

또한 앞에서도 설명 했듯이 로그인 컨트롤은 멤버 자격 공급자와 유기적으로 동작 한다고 했습니다 . 그러므로 표에서 소개한 멤버 자격 공급자를 정의하는 <add> 요소의 특성을 수정하면 수정된 설정 내용이 CreateUserWizard 컨트롤에 그대로 반영됩니다 . 예를 들어 , <add> 요소에서 requiresQuestionAndAnswer 특성 값을 False 로 지정하면 , CreateUserWizard 컨트롤에서 보안 질문과 보안 대답 부분은 나타나지 않습니다 . 참고로 보안 질문과 보안 대답은 암호 찾기 시 사용되는 항목입니다 .

로그인 컨트롤 사용하기

Page 40: 인증 (Authentication) 과 권한 부여 (Authorization) 로그인 컨트롤 사용하기 멤버 자격  API 와 역할 관리자

RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line

www.hanbitbook.co.kr

< 사용자 만들기 > 버튼을 클릭하면 새로운 사용자가 생성됩니다 . 물론 이때 , 사용자 생성과 관련된 프로세스는 멤버 자격 공급자에서 자동 처리되므로 우리가 작성해야 할 코드는 단 한 줄도 없습니다 .

멤버 자격은 로그인 컨트롤 , 멤버 자격 공급자 그리고 멤버 자격 공급자와 연결된 데이터 소스와 유기적으로 동작하여 보안 프로세스를 구현해 준다고 했는데 , 그러면 CreateUserWizard 컨트롤을 통해 사용자가 입력한 정보는 실제로 어디에 저장되는 것일까요 ?

사용자 정보를 입력하고 < 사용자 만들기 > 버튼을 클릭하여 새로운 사용자를 만들면 App_Data 폴더 하위에 ASPNETDB.MDF 파일이 생성되는데 , 사용자 정보는 바로 이 곳에 저장됩니다 .

로그인 컨트롤 사용하기

Page 41: 인증 (Authentication) 과 권한 부여 (Authorization) 로그인 컨트롤 사용하기 멤버 자격  API 와 역할 관리자

RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line

www.hanbitbook.co.kr

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 등등 ) 도 볼 수 있는데 이것들은 관련 내용을 다루면서 다시 설명하겠습니다 .

로그인 컨트롤 사용하기

Page 42: 인증 (Authentication) 과 권한 부여 (Authorization) 로그인 컨트롤 사용하기 멤버 자격  API 와 역할 관리자

RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line

www.hanbitbook.co.kr

로그인 컨트롤 사용하기

Page 43: 인증 (Authentication) 과 권한 부여 (Authorization) 로그인 컨트롤 사용하기 멤버 자격  API 와 역할 관리자

RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line

www.hanbitbook.co.kr

이와 같이 App_Data 폴더에 ASPNETDB.MDF 라는 이름의 파일이 생성되는 이유는 Machine.config 파일에서 멤버 자격 공급자가 사용하는 연결 문자열의 특성 중 connectionString 특성의 값이 다음과 같이 정의되어 있기 때문입니다 (AttachDBFilename=|DataDirectory|aspnetdb.mdf).

로그인 컨트롤 사용하기

<connectionStrings> <add name="LocalSqlServer" connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true" providerName="System.Data.SqlClient" />

</connectionStrings>

Page 44: 인증 (Authentication) 과 권한 부여 (Authorization) 로그인 컨트롤 사용하기 멤버 자격  API 와 역할 관리자

RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line

www.hanbitbook.co.kr

이 렇 게 SQL Server Express 파 일 기 반 데이터베이스를 사용하면 사용자의 추가적인 설치 작업 없이도 즉시 데이터베이스를 만들 수 있다는 이점이 있습니다 .

그럼 , 여기까지의 내용을 간단히 정리해보겠습니다 .멤버 자격에서 로그인 컨트롤과 데이터 소스 사이에 위치해 있으면서 핵심적인 역할을 하는 멤버 자격 공급자는 기본적으로 Machine.config 파일에 다음과 같이 정의되어 있으며 SQL Server Express 파일 기반 데이터베이스에 연결하는 LocalSqlServer 라는 연결 문자열을 사용합니다 .

로그인 컨트롤 사용하기

Page 45: 인증 (Authentication) 과 권한 부여 (Authorization) 로그인 컨트롤 사용하기 멤버 자격  API 와 역할 관리자

RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line

www.hanbitbook.co.kr

로그인 컨트롤 사용하기<configuration> <connectionStrings> <add name="LocalSqlServer" connectionString="data source=.\SQLEXPRESS;Integrat

ed 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.SqlMemb

ershipProvider, 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>

Page 46: 인증 (Authentication) 과 권한 부여 (Authorization) 로그인 컨트롤 사용하기 멤버 자격  API 와 역할 관리자

RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line

www.hanbitbook.co.kr

이제 여러분은 멤버 자격가 어떤 방식으로 구동되는지 , 그 큰 틀을 이해할 수 있을 것입니다 . 앞으로 공부할 다른 로그인 컨트롤들 (Login, LoginName, ChangePassword 등등 ) 도 CreateUserWizard 컨트롤과 마찬가지로 Web.config 파일에서 멤버 자격 공급자를 재정의하지 않는 이상 Machine.config 파일에 정의되어 있는 기본 멤버 자격 공급자 (AspNetSqlMembershipProvider) 를 사용하여 데이터 소스 (ASPNETDB.MDF)에 연결하고 해당 보안과 관련된 작업들을 자동으로 처리합니다 .

CreateUserWizard 컨트롤을 사용한 예제는 다른 로그인 컨트롤들을 살펴 본 후 다른 로그인 컨트롤들과 함께 다루어 볼 것입니다 . 그리고 새로운 멤버 자격 공급자를 Web.config 파일에 추가하여 사용하는 방법은 예제 13-2 에서 설명합니다 .

로그인 컨트롤 사용하기

Page 47: 인증 (Authentication) 과 권한 부여 (Authorization) 로그인 컨트롤 사용하기 멤버 자격  API 와 역할 관리자

RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line

www.hanbitbook.co.kr

Login 컨트롤 Login 컨 트 롤 은 로 그 인 기 능 을 제 공 해 주 는 컨트롤입니다 . 다음은 Login 컨트롤을 웹 폼 위로 끌어다 놓았을 때의 기본적인 모습입니다 .

로그인 컨트롤 사용하기New in 2.0

<asp:Login ID="Login1" runat="server"></asp:Login>

Page 48: 인증 (Authentication) 과 권한 부여 (Authorization) 로그인 컨트롤 사용하기 멤버 자격  API 와 역할 관리자

RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line

www.hanbitbook.co.kr

사용자가 < 로그인 > 버튼을 클릭하는 순간 Login 컨트롤은 입력 받은 사용자 이름 ( 계정 ) 과 암호를 지정된 멤버 자격 공급자로 넘겨주고 멤버 자격 공급자는 해당 데이터 소스에 접근하여 일치하는 사용자 정보를 검색합니다 . 만약 사용자 이름과 암호가 일치하는 사용자 정보가 존재한다면 인증 쿠키를 생성하여 인증 처리를 하고 , 존재하지 않는다면 해당 결과를 다시 Login 컨트롤로 돌려줍니다 . 그리고 결과를 돌려 받은 Login 컨트롤은 지정된 오류 메시지를 출력합니다 . 이러한 유기적인 처리 과정은 멤버 자격의 구조 그림 또는 공급자 모델 디자인 패턴을 떠올려보면 쉽게 이해할 수 있습니다 .

로그인 컨트롤 사용하기

Page 49: 인증 (Authentication) 과 권한 부여 (Authorization) 로그인 컨트롤 사용하기 멤버 자격  API 와 역할 관리자

RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line

www.hanbitbook.co.kr

LoginView 컨트롤 LoginView 컨트롤은 인증된 사용자와 익명 사용자에게

보여줄 화면을 구분해서 표시해주는 컨트롤입니다 . 예를 들어 , 흔히 회원제 웹 사이트에서는 다음과 같이 좌측 상단에 로 그 인 할 수 있 도 록 로 그 인 상 자 를 제 공 하 는 것 이 보통입니다 .

로그인 컨트롤 사용하기New in 2.0

Page 50: 인증 (Authentication) 과 권한 부여 (Authorization) 로그인 컨트롤 사용하기 멤버 자격  API 와 역할 관리자

RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line

www.hanbitbook.co.kr

로그인 상자를 통해 인증 절차를 거치면 로그인 상자는 다음과 같이 변경됩니다 .

로그인 컨트롤 사용하기

Page 51: 인증 (Authentication) 과 권한 부여 (Authorization) 로그인 컨트롤 사용하기 멤버 자격  API 와 역할 관리자

RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line

www.hanbitbook.co.kr

이렇게 인증된 사용자와 익명 사용자에게 보여줄 화면 을 구분하 여 표 시 해야 할 때 사 용 되 는 컨트롤이 바로 LoginView 컨트롤입니다 .

로그인 컨트롤 사용하기

<asp:Login ID="Login1" runat="server"></asp:Login>

Page 52: 인증 (Authentication) 과 권한 부여 (Authorization) 로그인 컨트롤 사용하기 멤버 자격  API 와 역할 관리자

RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line

www.hanbitbook.co.kr

물론 , 이 렇 게 기 본 적 인 LoginView 컨트롤을 사용하면 우리가 원하는 동작을 이끌어 낼 수 없습니다 . 다음과 같이 LoginView 컨트롤에서 제공하는 AnonymousTemplate 과 LoggedInTempate 을 추가하여 익명 사용자 및 인증된 사용자에게 보여줄 화면을 직접 디자인 해야 합니다 .

로그인 컨트롤 사용하기

<asp:LoginView ID="LoginView1" runat="server"> <AnonymousTemplate> </AnonymousTemplate> <LoggedInTemplate> </LoggedInTemplate></asp:LoginView>

Page 53: 인증 (Authentication) 과 권한 부여 (Authorization) 로그인 컨트롤 사용하기 멤버 자격  API 와 역할 관리자

RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line

www.hanbitbook.co.kr

LoginName 컨트롤 LoginName 컨트롤은 인증된 사용자의 이름을 출력하는 컨트롤이며 익명 사용자에게는 렌더링 되지 않습니다 . 다음은 LoginName 컨트롤을 웹 폼 위로 끌어다 놓았을 때의 기본적인 모습입니다 .

로그인 컨트롤 사용하기New in 2.0

<asp:LoginName ID="LoginName1" runat="server" />

Page 54: 인증 (Authentication) 과 권한 부여 (Authorization) 로그인 컨트롤 사용하기 멤버 자격  API 와 역할 관리자

RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line

www.hanbitbook.co.kr

LoginStatus 컨트롤 LoginStatus 컨트롤은 인증된 사용자에게는

로그아웃 링크를 표시하고 익명 사용자에게는 로그인 링크를 표시해주는 컨트롤입니다 . 다음은 LoginStatus 컨트롤을 웹 폼 위로 끌어다 놓았을 때의 기본적인 모습입니다 .

로그인 컨트롤 사용하기New in 2.0

<asp:LoginStatus ID="LoginStatus1" runat="server" />

Page 55: 인증 (Authentication) 과 권한 부여 (Authorization) 로그인 컨트롤 사용하기 멤버 자격  API 와 역할 관리자

RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line

www.hanbitbook.co.kr

익명 사용자에게 표시되는 로그인 링크를 클릭하면 구성 파일의 <authentication> 요소 하위의 <forms> 요소의 loginUrl 특성에서 지정한 페이지 URL로 이동합니다 . 만약 <forms> 요소에 loginUrl 특성을 정의하지 않으면 기본값인 Login.aspx 페이지로 이동합니다 .

그리고 인증된 사용자에게 표시되는 로그아웃 링크를 클릭하면 자동으로 로그아웃 ( 인증 쿠키 삭제 ) 되고 현재 페이지가 Refresh 됩니다 .

로그인 컨트롤 사용하기

Page 56: 인증 (Authentication) 과 권한 부여 (Authorization) 로그인 컨트롤 사용하기 멤버 자격  API 와 역할 관리자

RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line

www.hanbitbook.co.kr

ChangePassword 컨트롤 ChangePassword 컨트롤은 암호 수정 기능을

제공하는 컨트롤입니다 . 다음은 ChangePassword 컨트롤을 웹 폼 위로 끌어다 놓았을 때의 기본적인 모습입니다 .

로그인 컨트롤 사용하기New in 2.0

<asp:ChangePassword ID="ChangePassword1" runat="server">

</asp:ChangePassword>

Page 57: 인증 (Authentication) 과 권한 부여 (Authorization) 로그인 컨트롤 사용하기 멤버 자격  API 와 역할 관리자

RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line

www.hanbitbook.co.kr

ChangePassword 컨트롤이 제 대 로 동 작 하 기 위해서는 멤버 자격 공급자를 정의하는 <add> 요소의 passwordFormat 특성이 Clear 또는 Encrypted 인 상태에서 사용자를 생성해야 하며 <add> 요소의 enabelPasswordRetrieval 특성이 True 로 지정되어 있어야 합니다 . 만약 <add> 요소의 passwordFormat 특 성 이 Hashed 인 상 태 에 서 사용자를 생성하면 암호가 해시 알고리즘으로 암호화되어 암호를 다시 찾을 수 없게 되며 ChangePassword 컨트롤 또한 제 기능을 하지 못합니다 .

로그인 컨트롤 사용하기

Page 58: 인증 (Authentication) 과 권한 부여 (Authorization) 로그인 컨트롤 사용하기 멤버 자격  API 와 역할 관리자

RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line

www.hanbitbook.co.kr

PasswordRecovery 컨트롤 PasswordRecovery 컨트롤은 사용자가 잊어버린

암호를 사용자의 전자메일로 발송해주는 컨트롤입니다 . 다음은 PasswordRecovery 컨트롤을 웹 폼 위로 끌어다 놓았을 때의 기본적인 모습입니다 .

로그인 컨트롤 사용하기New in 2.0

<asp:PasswordRecovery ID="PasswordRecovery1" runat="server"></asp:PasswordRecovery>

Page 59: 인증 (Authentication) 과 권한 부여 (Authorization) 로그인 컨트롤 사용하기 멤버 자격  API 와 역할 관리자

RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line

www.hanbitbook.co.kr

PasswordRecovery 컨트롤이 제 기능을 하기 위해선 ChangePassword 컨트롤과 마찬가지로 멤버 자격 공급자를 정의하는 <add> 요소의 passwordFormat 특성을 Clear 또는 Encrypted 로 지정하고 enablePasswordRetrieval 특성을 True 로 지정해야 합니다 .

그러므로 웹 사이트에서 멤버 자격의 암호 수정 및 찾기 기능을 사용하기 위해서는 애당초 멤버 자격 공급자를 정의하는 <add> 요소의 passwordFormat 특성을 Clear 또는 Encrypted 로 지정하고 사용자를 생성해야 합니다 . passwordFormat 특성이 Hashed 인 상태에서 생성된 사용자는 암호를 수정하거나 찾을 수 없습니다 .

로그인 컨트롤 사용하기

Page 60: 인증 (Authentication) 과 권한 부여 (Authorization) 로그인 컨트롤 사용하기 멤버 자격  API 와 역할 관리자

RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line

www.hanbitbook.co.kr

찾은 암호를 사용자에게 전자메일로 발송하기 위해서는 웹 서버에 SMTP 서비스가 설치되어 있어야 합니다 . SMTP(Simple Mail Transfer Protocol) 는 전자 메일을 발송하기 위한 프로토콜 (규약 )을 의미하며 SMTP 서비스는 IIS 에 포함되어 있으면서 전자 메일 발송 요청이 일어날 경우 이것을 SMTP( 메일 발송 규약 ) 에 따라 처리해주는 서비스를 말합니다 . SMTP 서비스와 관련된 자세한 내용은 ‘ 19장 . 전자메일 발송’ 을 참고하세요 .

그리고 전자메일이 발송되기 위해서는 최소한 다음과 같이 <asp:PasswordRecovery> 컨트롤 선언 구문 하위에 <MailDefinition> 요소를 추가하여 From 속성을 설정해 주고

로그인 컨트롤 사용하기

Page 61: 인증 (Authentication) 과 권한 부여 (Authorization) 로그인 컨트롤 사용하기 멤버 자격  API 와 역할 관리자

RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line

www.hanbitbook.co.kr

Web.config 파일에 다음과 같은 SMTP 의 Host 설정을 추가해 주어야 합니다 .

로그인 컨트롤 사용하기<asp:PasswordRecovery ID="PasswordRecovery1" runat="server"> <MailDefinition From="[email protected]" ></MailDefinition></asp:PasswordRecovery>

<configuration><system.web> … 생략 …</system.web> <system.net> <mailSettings> <smtp> <network host="127.0.0.1"/> </smtp> </mailSettings></system.net></configuration>

Page 62: 인증 (Authentication) 과 권한 부여 (Authorization) 로그인 컨트롤 사용하기 멤버 자격  API 와 역할 관리자

RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line

www.hanbitbook.co.kr

127.0.0.1 은 localhost 를 의미합니다 . PasswordRecovery 컨트롤이 실행되면 우선 , 사용자 이름을 묻고 , 그 다음 회원 가입 시 입력했던 보안 질문에 대한 보안 대답을 묻습니다 . 만약 보안 대답이 정확하다면 회원 가입 시 입력했던 전자메일로 암호가 발송됩니다 .

참고로 PasswordRecovery 컨트롤 하위의 <MailDefinition> 요소에서 제공하는 여러 속성 (Subject, CC, IsBodyHtml, BodyFileName 등등 ) 들을 사용하면 메일 제목 , 메일 참조 , Body 형식 , Body 파일 등을 지정할 수 있습니다 . 특히 BodyFileName 속성에는 메일의 배경으로 사용될 HTML 파일을 지정할 수 있는데 이 HTML 파일 내부에 <%UserName%>, <%Password%> 라는 구문을 입력하면 HTML 파일에 사용자 이름과 암호가 자동으로 바인딩 되어 발송됩니다 .

로그인 컨트롤 사용하기

Page 63: 인증 (Authentication) 과 권한 부여 (Authorization) 로그인 컨트롤 사용하기 멤버 자격  API 와 역할 관리자

RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line

www.hanbitbook.co.kr

로그인 컨트롤을 사용한 예제 [ 예제 13-2] 로그인 컨트롤을 사용한 예제

로그인 컨트롤 사용하기

Page 64: 인증 (Authentication) 과 권한 부여 (Authorization) 로그인 컨트롤 사용하기 멤버 자격  API 와 역할 관리자

RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line

www.hanbitbook.co.kr

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 설 치 마법사 사용하기

로그인 컨트롤 사용하기

Page 65: 인증 (Authentication) 과 권한 부여 (Authorization) 로그인 컨트롤 사용하기 멤버 자격  API 와 역할 관리자

RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line

www.hanbitbook.co.kr

사 용 자 지 정 멤 버 자 격 공 급 자 (custom membership provider) ASP.NET 2.0 에서 제공해주는 기본적인 멤버 자격에서는 사용자 이름 (ID), 암호 , 전자메일 , 보안 질문 , 보안 대답과 같은 미리 정해진 정보들을 입력 받고 다룰 수 있도록 해줍니다 . 그렇다면 , 이렇게 기본적으로 제공해주는 정보들 외에 회원제 웹 사이트에서 사용될 수 있는 우편번호 , 주소 , 전화번호 ,

주민등록번호와 같은 정보들을 멤버 자격에서 사용하려면 어떻게 해야 할까요 ? 결론부터 말하자면 , 멤버 자격 공급자를 사용자 지정하지 않는 이상 (개발자가 임의로 구현하지 않는 이상 ) 멤버 자격에서 새로운 정보를 추가하여 사용할 수는 없습니다 .

로그인 컨트롤 사용하기

Page 66: 인증 (Authentication) 과 권한 부여 (Authorization) 로그인 컨트롤 사용하기 멤버 자격  API 와 역할 관리자

RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line

www.hanbitbook.co.kr

그러므로 로그인 컨트롤 및 멤버 자격 API 에서도 새로운 정보를 처리할 수 있도록 하려면 SqlMembershipProvider 클래스를 상속 받아 다시 구현하거나 SqlMembershipProvider 클래스의 부모 클래스인 MembershipProvider 클래스를 상속 받아 사용자 지정 멤버 자격 공급자 (custom membership provider) 를 구현하는 수 밖에 없습니다 .

사용자 지정 멤버 자격 공급자 구현과 관련된 내용은 이 책의 범위를 벗어나므로 자세히 설명하지 않습니다 .

로그인 컨트롤 사용하기

<asp:PasswordRecovery ID="PasswordRecovery1" runat="server"> <MailDefinition From="[email protected]" ></MailDefinition></asp:PasswordRecovery>

Page 67: 인증 (Authentication) 과 권한 부여 (Authorization) 로그인 컨트롤 사용하기 멤버 자격  API 와 역할 관리자

RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line

www.hanbitbook.co.kr

멤버 자격 API 로 그 인 컨 트 롤 은 내부 적 으 로 멤 버 자 격 API 를 사용하여 관련 프로세스를 처리하며 개발자는 멤버 자격

API 를 소 스 코 드 에 직 접 사 용 하 여 멤 버 자 격 을 프로그래밍 방식으로 제어할 수 있습니다 . 멤버 자격 API 에서 핵심이 되는 클래스는 다음의 두 클래스로 일축할 수 있습니다 .

이 두 클 래 스 를 사 용 하 면 멤 버 자 격 에 서 제 공 하 는 사용자 생성 , 사용자 정보 참조 , 사용자 정보 수정 , 사용자 유효성 검사 , 사용자 삭제 등등의 프로세스를 손쉽게 구현할 수 있습니다 .

멤버 자격 API 와 역할 관리자

- Membership 클래스- MembershipUser 클래스

Page 68: 인증 (Authentication) 과 권한 부여 (Authorization) 로그인 컨트롤 사용하기 멤버 자격  API 와 역할 관리자

RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line

www.hanbitbook.co.kr

사용자 생성• 사용자 생성은 Membership 클래스에서 제공하는 Create

User() 메서드를 사용합니다 .

멤버 자격 API 와 역할 관리자

메서드 설명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() 메서드 ]

Page 69: 인증 (Authentication) 과 권한 부여 (Authorization) 로그인 컨트롤 사용하기 멤버 자격  API 와 역할 관리자

RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line

www.hanbitbook.co.kr

• 이 메서드는 예를 들어 < 회원 가입 > 버튼이 클릭되었을 경우 다음과 같이 사용될 수 있습니다 .

멤버 자격 API 와 역할 관리자

MembershipCreateStatus status;Membership.CreateUser(txtUserName.Text, txtPassword.Text, txtEmail.Text, txtPasswordQ

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

Page 70: 인증 (Authentication) 과 권한 부여 (Authorization) 로그인 컨트롤 사용하기 멤버 자격  API 와 역할 관리자

RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line

www.hanbitbook.co.kr

• CreateUser() 메서드를 사용해서 사용자를 생성하고 있으며 , MembershipCreateStatus 개체를 통해 사용자 생성 시 상태 값을 받아 옵니다 . 그리고 CreateUser() 메 서 드 를 통 해 입 력 한 정 보 는 당연히 멤버 자 격 공급자에서 지정한 데이터 소스에 저장됩니다 .

멤버 자격 API 와 역할 관리자

Page 71: 인증 (Authentication) 과 권한 부여 (Authorization) 로그인 컨트롤 사용하기 멤버 자격  API 와 역할 관리자

RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line

www.hanbitbook.co.kr

<Exercise 13-1> 멤버 자격 API 를 이용한 사용자 생성로그인 컨트롤이 아닌 멤버 자격 API 를 이용하여 다음과 같이 사용자를 생성하는 페이지를 구현해 봅시다 .

멤버 자격 API 와 역할 관리자

Page 72: 인증 (Authentication) 과 권한 부여 (Authorization) 로그인 컨트롤 사용하기 멤버 자격  API 와 역할 관리자

RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line

www.hanbitbook.co.kr

사용자 정보 참조• 사 용 자 생 성 시 입 력한 사 용 자 정 보는 Membership 클래스에서 제공하는 GetUser() 메서드를 사용해서 참조합니다 . GetUser() 메서드는 사용자 정보를 가지고 있는 MembershipUser 개체를 반환 합니다 .

멤버 자격 API 와 역할 관리자

메서드 설명GetUser() 현재 로그온 되어 있는 사용자의 정보 (MembershipUser 개체 )

를 반환하고 해당 사용자의 마지막 작업 날짜 / 시간 (aspnet_Users 테이블의 LastActivityDate 칼럼 ) 을 업데이트합니다 .

GetUser(string username) 매개변수로 정의된 사용자의 정보를 반환합니다 .GetUser(bool userInOnline) 현재 로그온 되어 있는 사용자의 정보를 반환 하고 매개변수로

정의된 bool 형식의 값을 통해 해당 사용자의 마지막 작업 날짜/ 시간을 업데이트 할 것인지의 여부를 결정합니다 . 매개변수의 값이 True 이면 마지막 작업 날짜 / 시간을 업데이트합니다 .

GetUser(string username, bool userInOnline)

첫번째 매개변수를 통해 해당 사용자의 정보를 반환하고 두번째 매개변수를 통해 해당 사용자의 마지막 작업 날짜 / 시간을 업데이트 할 것인지의 여부를 결정합니다 .

[GetUser() 메서드 ]

Page 73: 인증 (Authentication) 과 권한 부여 (Authorization) 로그인 컨트롤 사용하기 멤버 자격  API 와 역할 관리자

RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line

www.hanbitbook.co.kr

• 이 메서드는 회원 정보 보기 페이지 또는 회원 수정 페이지에서 회원 정보를 출력할 때 사용할 수 있습니다 .

멤버 자격 API 와 역할 관리자

MembershipUser memUser = Membership.GetUser();Response.Write(memUser.UserName + “<br>”);Response.Write(memUser.Email + “<br>”);Response.Write(memUser.LastActivityDate.ToString());

Page 74: 인증 (Authentication) 과 권한 부여 (Authorization) 로그인 컨트롤 사용하기 멤버 자격  API 와 역할 관리자

RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line

www.hanbitbook.co.kr

사용자 정보 수정• 사용자 정보 수정은 Membership 클래스에서 제공하는 U

pdateUser() 메서드를 사용합니다 .

• 이 메서드는 회원 수정 페이지에서 회원 정보를 수정 할 때 사용할 수 있습니다 .

멤버 자격 API 와 역할 관리자

메서드 설명UpdateUser(MembershipUser user)

매개변수로 정의된 MembershipUser 개체의 정보대로 사용자 정보를 수정합니다 .

[UpdateUser() 메서드 ]

MembershipUser memUser = Membership.GetUser();memUser.UserName = “ 수정된 사용자이름” ;memUser.Email = “ 수정된 전자메일” ;… 그 외 여러 사용자 관련 속성을 수정 한다 …Membership.UpdateUser(memUser);

Page 75: 인증 (Authentication) 과 권한 부여 (Authorization) 로그인 컨트롤 사용하기 멤버 자격  API 와 역할 관리자

RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line

www.hanbitbook.co.kr

사용자 유효성 검사• 사용자 유효성 검사는 Membership 클래스에서 제공하는 ValidateUser() 메서드를 사용합니다 .

멤버 자격 API 와 역할 관리자

메서드 설명ValidateUser(string username, string password)

매개변수로 정의된 username, password 를 통해 사용자가 유효한지 ( 존재하는지 ) 를 멤버 자격 공급자에서 지정한 데이터 소스에서 체크하고 그 결과를 bool 형식의 값으로 반환 합니다 .

[ValidateUser() 메서드 ]

Page 76: 인증 (Authentication) 과 권한 부여 (Authorization) 로그인 컨트롤 사용하기 멤버 자격  API 와 역할 관리자

RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line

www.hanbitbook.co.kr

• 이 메서드는 로그인 시 사용자가 입력한 사용자 이름 (ID)과 암호가 유효한지를 판단할 때 사용할 수 있습니다 .

멤버 자격 API 와 역할 관리자

if (Membership.ValidateUser(txtUserName.Text, txtPassword.Text)){ FormsAuthentication.RedirectFromLoginPage(txtUserName.Text, false);}else{ Response.Write(" 아이디가 존재하지 않거나 암호가 정확하지 않습니

다 .");}

Page 77: 인증 (Authentication) 과 권한 부여 (Authorization) 로그인 컨트롤 사용하기 멤버 자격  API 와 역할 관리자

RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line

www.hanbitbook.co.kr

사용자 삭제• 사 용 자 삭제 는 Membership 클래스 에 서 제 공 하 는 DeleteUser()

메서드를 사용합니다 . DeleteUser() 메서드는 사용자 삭제 성공 여부를 bool 형식의 값으로 반환합니다 .

• 이 메서드는 회원 탈퇴 페이지 등에서 사용될 수 있습니다 .

멤버 자격 API 와 역할 관리자

메서드 설명DeleteUser(string username) 매개변수로 정의된 사용자를 삭제 합니다 .

[DeleteUser() 메서드 ]

if (Membership.DeleteUser(User.Identity.Name)){ FormsAuthentication.SignOut(); Response.Redirect("~/Default.aspx");}else{ lblResult.Text = " 회원 삭제가 정상적으로 이루어지지 않았습니다 .";}

Page 78: 인증 (Authentication) 과 권한 부여 (Authorization) 로그인 컨트롤 사용하기 멤버 자격  API 와 역할 관리자

RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line

www.hanbitbook.co.kr

<Exercise 13-2> 멤버 자격 API 를 이용한 사용자 삭제 멤버 자격 API 를 이용하여 현재 생성되어 있는 모든 사용자의 이름을 드롭다운리스트에 바인딩하고 <선택 회원 삭제 > 버튼 클릭 시 드롭다운리스트에서 선택한 사용자를 삭제하는 페이지를 구현해 봅시다 .

힌트 : Membership 클래스의 GetAllUsers() 정적 메서드는 MembershipUserCollection 개체를 반환합니다 .

멤버 자격 API 와 역할 관리자

Page 79: 인증 (Authentication) 과 권한 부여 (Authorization) 로그인 컨트롤 사용하기 멤버 자격  API 와 역할 관리자

RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line

www.hanbitbook.co.kr

역할 관리자 (Role Manager) 역할 관리자는 ASP.NET 2.0 에서 제공해주는 역할 관리자 API 와 역할 관리 공급자가 서로 유기적으로 동작하여 역할 관리 프로세스와 관련된 작업을 자동으로 처리해주는 기능을 말합니다 . 역할 관리자도 다음과 같이 공급자 모델 디자인 패턴

(provider model design pattern) 을 그대로 따릅니다 .

멤버 자격 API 와 역할 관리자

Page 80: 인증 (Authentication) 과 권한 부여 (Authorization) 로그인 컨트롤 사용하기 멤버 자격  API 와 역할 관리자

RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line

www.hanbitbook.co.kr

기본 역할 공급자 (AspNetSqlRoleProvider) 는 Machine.config 파일에 정의되어 있습니다 . 하지만 멤버 자격이 기본적으로 사용가능 하도록 설정 되어 있는 반면 , 역할 관리자는 기본적으로 사용할 수 없도록 설정 되어 있습니다 . 그러므로 역할 관리자를 사용하기 위해서는 반드시 구성 파일의 <roleManager> 요소의 enabled 특성을 True 로 지정해야 합니다 .

멤버 자격 API 와 역할 관리자

Page 81: 인증 (Authentication) 과 권한 부여 (Authorization) 로그인 컨트롤 사용하기 멤버 자격  API 와 역할 관리자

RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line

www.hanbitbook.co.kr

다음은 Web.config 파일에서 <roleManager> 요소의 enabled 특성을 True 로 지정하여 역할 관리자를 사용 하도록 설정하고 , 새로운 역할 공급자 (MyAspNetSqlRoleProvider) 를 추가 한 후 새로 추가 한 역할 공급자 를 해당 웹 응 용 프로그램에서 기본 역할 공급자로 지정하는 (defaultProvider="MyAspNetSqlRoleProvider") 구문입니다 .

멤버 자격 API 와 역할 관리자

<roleManager enabled="true" defaultProvider="MyAspNetSqlRoleProvider"> <providers> <add name="MyAspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="LocalSqlServer" />

</providers></roleManager>

Page 82: 인증 (Authentication) 과 권한 부여 (Authorization) 로그인 컨트롤 사용하기 멤버 자격  API 와 역할 관리자

RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line

www.hanbitbook.co.kr

참고로 역할 관리자는 역할 관리자 API 만 지원할 뿐 역할 관리자와 관련된 서버 컨트롤은 지원하지 않습니다 .

역할 관리자 API 에서 핵심이 되는 클래스는 바로 Roles 클래스 입니다 .

Roles 클래스를 사용하면 역할 생성 , 역할에 사용자 추가 및 삭제 등의 프로세스를 손쉽게 처리할 수 있습니다 .

멤버 자격 API 와 역할 관리자

- Roles 클래스

Page 83: 인증 (Authentication) 과 권한 부여 (Authorization) 로그인 컨트롤 사용하기 멤버 자격  API 와 역할 관리자

RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line

www.hanbitbook.co.kr

역할 추가 및 삭제• 역할 추가 및 삭제는 Roles 클래스에서 제공하는 Create

Role(), DeleteRole() 메서드를 사용합니다 .

• 이 메서드들은 역할을 관리하는 관리자 페이지에서 사용될 수 있습니다 .

멤버 자격 API 와 역할 관리자

메서드 설명CreateRole(string roleName) 매개변수로 정의된 역할 이름 (roleName) 으로

새로운 역할을 생성 합니다 .

DeleteRole(string roleName) 매개변수로 정의된 역할을 삭제합니다 .

[CreateRole(), DeleteRole() 메서드 ]

Roles.CreateRole(“SpecialMember”); // SpecialMember 라는 역할 생성Roles.DeleteRole(“SpecialMember”); // SpecialMember 라는 역할 삭제

Page 84: 인증 (Authentication) 과 권한 부여 (Authorization) 로그인 컨트롤 사용하기 멤버 자격  API 와 역할 관리자

RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line

www.hanbitbook.co.kr

역할에 사용자 추가 또는 삭제• 역할 에 사 용 자 를 추가 하 기 위 해 서 는 다 음 과 같 은

메서드를 사용합니다 .

멤버 자격 API 와 역할 관리자

메서드 설명AddUserToRole(string username, string roleName)

첫번째 매개변수로 정의된 사용자를 두번째 매개변수로 정의된 역할에 추가합니다 .

AddUsersToRole(string[] usernames, string roleName)

첫번째 매개변수로 정의된 사용자들을 두번째 매개변수로 정의된 역할에 추가합니다 .

AddUserToRoles(string username, string[] roleNames)

첫번째 매개변수로 정의된 사용자를 두번째 매개변수로 정의된 역할들에 추가합니다 .

AddUsersToRoles(string[] usernames, string[] roleNames)

첫번째 매개변수로 정의된 사용자들을 두번째 매개변수로 정의된 역할들에 추가합니다 .

[ 역할에 사용자를 추가하는 메서드 ]

Page 85: 인증 (Authentication) 과 권한 부여 (Authorization) 로그인 컨트롤 사용하기 멤버 자격  API 와 역할 관리자

RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line

www.hanbitbook.co.kr

• 역할에서 특정 사용자를 삭제하기 위해서는 아래와 다음과 같은 메서드를 사용합니다 .

멤버 자격 API 와 역할 관리자

메서드 설명RemoveUserFromRole(string username, string roleName)

첫번째 매개변수로 정의된 사용자를 두번째 매개변수로 정의된 역할에서 삭제합니다 .

RemoveUsersFromRole(string[] usernames, string roleName)

첫번째 매개변수로 정의된 사용자들을 두번째 매개변수로 정의된 역할에서 삭제합니다 .

RemoveUserFromRoles(string username, string[] roleNames)

첫번째 매개변수로 정의된 사용자를 두번째 매개변수로 정의된 역할들에서 삭제합니다 .

RemoveUsersFromRoles(string[] usernames, string[] roleNames)

첫번째 매개변수로 정의된 사용자들을 두번째 매개변수로 정의된 역할들에서 삭제합니다 .

[ 역할에 사용자를 삭제하는 메서드 ]

Page 86: 인증 (Authentication) 과 권한 부여 (Authorization) 로그인 컨트롤 사용하기 멤버 자격  API 와 역할 관리자

RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line

www.hanbitbook.co.kr

• 이 메서드들 또한 역할을 관리하는 관리자 페이지에서 사용될 수 있습니다 .

멤버 자격 API 와 역할 관리자

Roles.AddUserToRole(“user1”, “SpecialMember”);Roles. RemoveUserFromRole(“user1”, “SpecialMember”);

Page 87: 인증 (Authentication) 과 권한 부여 (Authorization) 로그인 컨트롤 사용하기 멤버 자격  API 와 역할 관리자

RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line

www.hanbitbook.co.kr

이것만은 알고 갑시다폼 기반 인증 멤버 자격 권한 부여역할 공급자 모델 디자인 패턴 aspnet_regsql.exe역할 관리자 인증

(1) ( ) 은 특정 사용자가 유효한 사용자인지를 판단하는 과정을 의미합니다 .(2) ( ) 는 특정 사용자가 웹 사이트에서 제공하는 콘텐츠에 접근 가능한지를 판단하는 과정을

의미합니다 .(3) ( ) 은 HTTP 쿠키와 HTML 폼을 이용하는 인증 방식입니다 . 또한 이 인증 방식은 ASP.NET

에서 제공하는 인증 관련 API 를 사용할 수 있기 때문에 인증 처리를 쉽게 할 수 있다는 장점이 있습니다 .

(4) ( ) 은 보안면에서 동일한 권한을 가진 그룹을 의미하며 여기에 여러 사용자들을 포함시킬 수 있습니다 .

(5) ( ) 은 ASP.NET 2.0에서 제공해주는 로그인 컨트롤 , 멤버 자격 API, 멤버 자격 공급자 (membership provider) 가 서로 유기적으로 동작하여 보안 프로세스와 관련된 작업을 자동으로 처리해주는 서비스를 말합니다 .

(6) ( ) 은 각 데이터 소스에 맞는 공급자와 해당 API 를 통해 관련 기능을 제어하는 패턴을 말합니다 .

(7) ( ) 는 SQL Server 공급자에서 사용하는 SQL Server 데이터베이스를 설치하는 도구로서 마법사 형식 또는 명령 프롬프트 형식을 제공합니다 .

(8) ( ) 는 ASP.NET 2.0에서 제공해주는 역할 관리자 API 와 역할 관리 공급자가 서로 유기적으로 동작하여 역할 관리 프로세스와 관련된 작업을 자동으로 처리해주는 기능을 말합니다 .

1. 각 문장에 어울리는 적절한 용어를 상자 안에서 골라 보세요 .

Page 88: 인증 (Authentication) 과 권한 부여 (Authorization) 로그인 컨트롤 사용하기 멤버 자격  API 와 역할 관리자

RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line

www.hanbitbook.co.kr

이것만은 알고 갑시다2. 다음의 구성 파일을 수정하여 인증 방식을 폼 기반 인증으로 변경해 보세요 .

<configuration> <system.web> <authentication mode="Windows" /> </system.web></configuration>

3. 다음과 같은 구성 파일의 <authorization> 요소에서 Admins 역할을 가진 사용자들만 접근을 허용하고 나머지 모든 사용자들의 접근을 거부 하도록 빈칸을 채워 구문을 완성해 봅시다 .

<authorization>( ) </authorization>

4. 로그인 컨트롤을 모두 나열해 보세요 (총 7 개 ).