참고
이 문서가 작성된 이후 ASP.NET 멤버 자격 공급자는 ASP.NET ID로 대체되었습니다. 이 문서를 작성할 때 추천한 멤버 자격 공급자가 아닌 ASP.NET ID 플랫폼을 사용하도록 앱을 업데이트하는 것이 좋습니다. ASP.NET ID는 를 포함하여 ASP.NET 멤버 자격 시스템에 비해 여러 가지 이점이 있습니다.
- 성능 향상
- 향상된 확장성 및 테스트 가능성
- OAuth, OpenID Connect 및 2단계 인증 지원
- 클레임 기반 ID 지원
- ASP.Net Core와의 상호 운용성 향상
ASP.NET 멤버 자격은 ASP.NET 1.x에서 Forms 인증 모델의 성공을 기반으로 합니다. ASP.NET Forms 인증은 ASP.NET 애플리케이션에 로그인 양식을 통합하고 데이터베이스 또는 기타 데이터 저장소에 대해 사용자의 유효성을 검사하는 편리한 방법을 제공합니다.
ASP.NET 멤버 자격은 ASP.NET 1.x에서 Forms 인증 모델의 성공을 기반으로 합니다. ASP.NET Forms 인증은 ASP.NET 애플리케이션에 로그인 양식을 통합하고 데이터베이스 또는 기타 데이터 저장소에 대해 사용자의 유효성을 검사하는 편리한 방법을 제공합니다. FormsAuthentication 클래스의 멤버를 사용하면 인증, 유효한 로그인 검사, 사용자 로그아웃 등에 대한 쿠키를 처리할 수 있습니다. 그러나 ASP.NET 1.x 애플리케이션에서 Forms 인증을 구현하려면 상당한 양의 코드가 필요할 수 있습니다.
ASP.NET 2.0의 멤버 자격은 Forms 인증만으로도 크게 발전된 것입니다. (멤버 자격은 Forms 인증과 결합할 때 가장 강력하지만 Forms 인증을 사용하는 것은 요구 사항이 아닙니다.) 곧 보겠지만 ASP.NET 2.0의 ASP.NET 멤버 자격 및 로그인 컨트롤을 사용하여 많은 코드를 작성하지 않고도 강력한 멤버 자격 시스템을 구현할 수 있습니다.
ASP.NET 2.0에서 멤버 자격 구현
멤버 자격은 4단계에 따라 구현됩니다. 구현할 수 있는 선택적 구성뿐만 아니라 관련된 많은 하위 단계가 있습니다. 이러한 단계는 멤버 자격 구성의 큰 그림을 설명하기 위한 것입니다.
멤버 자격 데이터베이스를 만듭니다(SQL Server 멤버 자격 저장소로 사용되는 경우).
애플리케이션 구성 파일에서 멤버 자격 옵션을 지정합니다. (멤버 자격은 기본적으로 사용하도록 설정됩니다.)
사용하려는 멤버 자격 저장소의 유형을 결정합니다. 옵션은 다음과 같습니다.
- Microsoft SQL Server(버전 7.0 이상)
- Active Directory 저장소
- 사용자 지정 멤버 자격 공급자
ASP.NET Forms 인증을 위해 애플리케이션을 구성합니다. 다시 한 번 멤버 자격은 Forms 인증을 활용하도록 설계되었지만 Forms 인증을 사용하는 것은 요구 사항이 아닙니다.
멤버 자격에 대한 사용자 계정을 정의하고 원하는 경우 역할을 구성합니다.
멤버 자격 데이터베이스 만들기
SQL Server 7.0 이상을 멤버 자격 저장소로 사용하는 경우 aspnet_regsql 유틸리티(Visual Studio .NET 2005 명령 프롬프트에서 가장 쉽게 사용 가능)를 사용하여 데이터베이스를 구성할 수 있습니다. aspnet_regsql 유틸리티는 명령 프롬프트 도구 또는 GUI 마법사를 통해 사용할 수 있습니다. 마법사 메서드는 데이터베이스를 구성하는 가장 쉬운 방법입니다. 마법사에 액세스하려면 다음 명령을 실행하기만 하면됩니다.
aspnet_regsql W
해당 명령을 실행하면 아래와 같이 ASP.NET SQL Server 설치 마법사가 표시됩니다.
그림 1
ASP.NET SQL Server 설치 마법사는 마법사에서 지정한 instance 웹 사이트를 만듭니다. 그러나 ASP.NET machine.config 파일의 연결 문자열을 사용하여 데이터베이스에 연결합니다. 기본적으로 이 연결 문자열은 SQL Server 2005 instance 가리키므로 SQL Server 2000 또는 SQL Server 7.0 instance 사용하는 경우 machine.config 파일에서 연결 문자열을 수정해야 합니다. 해당 연결 문자열은 다음 위치에 있을 수 있습니다.
<configuration>
<connectionStrings>
<add name="LocalSqlServer"
connectionString="data source=(local);
Integrated Security=SSPI;Initial Catalog=aspnetdb;"
providerName="System.Data.SqlClient" />
</connectionStrings>
</configuration>
아쉽게도 연결 문자열을 수정하지 않으면 ASP.NET 설명 오류가 표시되지 않습니다. 데이터베이스를 만들지 않았다고 계속 불평합니다. 위의 경우 로컬 SQL Server 2000 instance 가리키도록 연결 문자열을 수정했습니다.
구성 지정 및 사용자 및 역할 추가
멤버 자격 구성의 다음 단계는 애플리케이션의 web.config 파일에 필요한 정보를 추가하는 것입니다. ASP.NET 1.x에서는 lowerCamelCase를 사용하고 Intellisense가 부족하여 web.config 파일을 수정하기가 어려웠습니다. Visual Studio .NET 2005를 사용하면 구성 파일에 대한 Intellisense로 작업을 훨씬 쉽게 수행할 수 있지만 ASP.NET 2.0은 구성 파일을 편집하기 위한 웹 인터페이스를 제공하여 한 단계 더 발전합니다.
아래와 같이 솔루션 탐색기 도구 모음에서 ASP.NET 구성 단추를 클릭하여 웹 인터페이스를 시작할 수 있습니다. 로그인 컨트롤을 삽입할 때 표시되는 팝업을 통해 웹 인터페이스를 시작할 수도 있습니다.
그림 2
그러면 아래에 표시된 ASP.NET 웹 사이트 관리 도구가 시작됩니다. ASP.NET 웹 사이트 관리는 애플리케이션 설정을 쉽게 관리할 수 있는 4개의 탭 인터페이스입니다. 다음 탭을 사용할 수 있습니다.
- Home
- 보안 사용자, 역할 및 액세스를 구성합니다.
- 응용 프로그램 애플리케이션 설정을 구성합니다.
- 공급자 애플리케이션 멤버 자격 공급자를 구성하고 테스트합니다.
웹 사이트 관리 도구를 사용하면 쉽게 새 사용자를 만들고, 새 역할을 만들고, 사용자 및 역할을 관리할 수 있습니다. 이 기능은 Windows 인터페이스에서 사용할 수 없습니다. Windows 인터페이스를 사용하면 권한 부여 설정을 쉽게 정의하고 웹 사이트 관리 도구에 없는 공급자 기능을 추가, 삭제 및 관리할 수 있습니다.
Windows 인터페이스를 시작하려면 인터넷 정보 서비스 스냅인을 열고 애플리케이션을 마우스 오른쪽 단추로 클릭한 다음 속성을 선택합니다. ASP.NET 탭을 클릭한 다음 구성 편집 단추를 클릭합니다. (구성 편집 단추를 사용하도록 설정하려면 애플리케이션이 ASP.NET 2.0에서 실행되어야 합니다. ASP.NET 대화 상자에서도 ASP.NET 버전을 구성할 수 있습니다.) ASP.NET 구성 설정 대화 상자는 아래와 같이 표시됩니다.
그림 3
일반 탭에 연결 문자열 및 애플리케이션 설정이 나열됩니다. 기울임꼴의 모든 설정은 부모 구성 파일(더 높은 수준의 machine.config 또는 web.config)에 정의되며 기울임꼴이 아닌 설정은 애플리케이션 구성 파일에서 가져옵니다. 애플리케이션 수준에서 설정을 추가, 제거 또는 편집하는 경우 ASP.NET 상속되는 구성 파일에서 설정을 제거하는 대신 web.config 애플리케이션 수준에서 설정을 추가, 제거 또는 수정합니다.
인증 탭은 다음과 같습니다. 여기에서 멤버 자격 설정을 구성합니다. 양식 인증 설정, 멤버 자격 공급자 및 역할 공급자는 여기에서 구성할 수 있습니다.
그림 4
애플리케이션에서 멤버 자격 구현
애플리케이션에서 ASP.NET 2.0 멤버 자격을 구현하는 가장 쉬운 방법은 제공된 로그온 컨트롤을 사용하는 것입니다. 이 메서드를 사용하면 코드를 작성하지 않고도 ASP.NET 2.0 멤버 자격의 기본 사항을 구현할 수 있습니다.
다음 로그온 컨트롤은 ASP.NET 2.0에서 사용할 수 있습니다.
로그인 컨트롤
로그인 컨트롤은 누군가가 멤버 자격 시스템에 로그인할 수 있는 인터페이스를 제공합니다. 사용자 이름 및 암호 텍스트 상자와 로그인 단추를 제공합니다. 아직 등록하지 않은 사용자를 등록하기 위한 링크, 사용자가 후속 방문에 자동으로 로그인할 수 있는 확인란, 암호 미리 알림 링크 등과 같은 다른 많은 일반적인 기능입니다. 로그인 컨트롤의 모든 기능은 컨트롤의 속성을 통해 사용자 지정할 수 있습니다.
ASP.NET 1.x에서 개발자는 Forms 인증을 사용할 때 조회를 수행하는 데 상당한 양의 코드를 작성해야 했습니다. ASP.NET 2.0 멤버 자격을 사용하면 코드를 작성하지 않고도 사용자의 유효성을 검사할 수 있습니다. ASP.NET 자동으로 사용자를 조회합니다. (ASP.NET 멤버 자격을 사용하지 않고 로그인 컨트롤을 사용하는 경우 OnAuthenticate 메서드를 사용하여 사용자의 유효성을 검사할 수 있습니다.)
LoginView 컨트롤
LoginView 컨트롤은 기본적으로 두 개의 템플릿을 제공하는 템플릿 컨트롤입니다. AnonymousTemplate 및 LoggedInTemplate입니다. 표시되는 템플릿은 사용자가 멤버 자격 시스템에 로그인되었는지 여부에 따라 결정됩니다. 이 컨트롤은 일반적으로 사용자가 아직 로그인하지 않은 경우 로그인 컨트롤과 사용자가 로그인했을 때 LoginStatus 컨트롤 및/또는 기타 로그인 컨트롤을 표시하는 데 사용됩니다. ASP.NET 애플리케이션에서 역할 관리를 사용하는 경우 LoginView 컨트롤은 사용자 역할에 따라 특정 템플릿을 표시할 수 있습니다. (ASP.NET 역할 관리에 대한 자세한 내용은 나중에 다룹니다.)
PasswordRecovery 컨트롤
PasswordRecovery 컨트롤을 사용하면 사용자가 현재 암호가 포함된 전자 메일을 받거나 암호를 재설정할 수 있습니다. 지우기 텍스트 및 암호화된 암호를 복구하고 사용자에게 전자 메일로 보낼 수 있습니다. 암호가 해시되면 복구할 수 없습니다. 대신 사용자는 암호 재설정을 수행해야 합니다.
LoginStatus 컨트롤
LoginStatus 컨트롤은 로그인하지 않은 사용자에게 로그인 표시기를 표시하고 현재 로그인한 사용자에게 로그아웃 표시기를 표시하는 데 사용됩니다. Request.IsAuthenticated 속성은 표시할 표시기를 결정하는 데 사용됩니다. LoginStatus 컨트롤에 표시되는 표시는 텍스트( LoginText 및 LogoutText 속성을 통해 구현됨) 또는 이미지( LoginImageUrl 및 LogoutImageUrl 속성을 통해 구현됨)일 수 있습니다.
사용자가 LoginStatus 컨트롤을 통해 로그아웃하면 LogoutPageUrl 속성에 지정된 URL로 리디렉션됩니다. 해당 속성이 설정되지 않으면 현재 페이지가 새로 고쳐집니다. 사이트가 Forms 인증으로 보호될 가능성이 높기 때문에 현재 페이지를 새로 고치면 사용자가 사이트의 로그인 페이지로 리디렉션됩니다.
LoginName 컨트롤
LoginName 컨트롤은 현재 사이트에 로그인한 사용자의 사용자 이름을 표시합니다.
CreateUserWizard 컨트롤
CreateUserWizard 컨트롤은 사용자에게 멤버 자격 시스템에 등록하는 편리한 방법을 제공합니다. 아래 표시된 인터페이스를 통해 단계(WizardSteps 컬렉션으로 구현됨)를 추가할 수 있습니다.
그림 5
CreateUserWizard는 마법사 클래스에서 파생되고 다음 템플릿을 제공하는 템플릿으로 된 컨트롤입니다.
- HeaderTemplate 이 템플릿은 마법사의 헤더 모양을 제어합니다.
- SidebarTemplate 이 템플릿은 마법사의 사이드바 모양을 제어합니다.
- StartNavigationTemplate 이 템플릿은 시작 단계에서 마법사의 탐색 모양을 제어합니다.
- StepNavigationTemplate 이 템플릿은 시작 또는 완료 단계에 없는 경우 탐색 영역의 모양을 제어합니다.
- FinishNavigationTemplate 이 템플릿은 완료 단계에서 탐색 영역의 모양을 제어합니다.
또한 마법사에 추가하는 각 단계에 대해 ASP.NET 해당 단계에 대한 ContentTemplate 및 CustomNavigationTemplate을 모두 포함하는 사용자 지정 템플릿을 만듭니다. CreateUserWizard 사용자 지정에 대한 자세한 내용은 VS.NET 2005 설명서를 참조하세요.
ChangePassword 컨트롤
ChangePassword 컨트롤을 사용하면 사용자가 암호를 변경할 수 있습니다. DisplayUserName 속성이 true인 경우(기본적으로 false임) 사용자가 로그인하지 않은 경우 암호를 변경할 수 있습니다. 사용자가 이미 로그인되어 있고 DisplayUserName 속성이 true인 경우 사용자는 로그인하지 않은 다른 사용자의 암호를 변경하여 해당 사용자의 사용자 ID를 알 수 있습니다.
사용자가 로그인하지 않고도 암호를 변경할 수 있도록 하려면 ChangePassword 컨트롤이 표시되는 페이지에서 익명 액세스를 허용하는지 확인해야 합니다. 분명히 사용자는 암호를 변경하기 위해 이전 암호를 제공해야 합니다.
역할 관리
역할 관리를 사용하면 특정 역할에 사용자를 할당한 다음 해당 역할에 따라 특정 파일 또는 폴더에 대한 액세스를 제한할 수 있습니다. 또한 역할 관리는 프로그래밍 방식으로 다른 사람의 역할을 확인하거나 특정 역할의 모든 사용자를 결정하고 그에 따라 응답할 수 있도록 API를 제공합니다.
역할 관리는 ASP.NET 멤버 자격의 요구 사항이 아니며 역할 관리를 사용하기 위한 멤버 자격 요구 사항도 아닙니다. 그러나, 두 잘 서로를 보완 하 고 개발자는 서로 함께 그들을 사용할 가능성이 높습니다.
애플리케이션에서 역할 관리를 사용하도록 설정하려면 web.config 파일에서 다음을 변경합니다.
<roleManager enabled="true" cacheRolesInCookie="true" cookieProtection="All" />
cacheRolesInCookie 특성이 true로 설정되면 ASP.NET 클라이언트의 쿠키에서 사용자 역할 멤버 자격을 캐시합니다. 이렇게 하면 RoleProvider를 호출하지 않고 역할 조회가 발생할 수 있습니다. 이 특성을 사용하는 경우 개발자는 cookieProtection 특성이 모두로 설정되어 있는지 확인하는 것이 좋습니다. (기본 설정입니다.) 이렇게 하면 쿠키 데이터가 암호화되고 쿠키 콘텐츠가 변경되지 않았는지 확인하는 데 도움이 됩니다. 웹 사이트 관리 도구를 사용하여 역할을 추가할 수 있습니다. 역할을 쉽게 정의하고, 해당 역할에 따라 사이트의 일부에 대한 액세스를 구성하고, 사용자를 역할에 할당할 수 있습니다.
그림 6
위에 표시된 것처럼 역할의 이름을 입력한 다음 역할 추가를 클릭하여 새 역할을 추가할 수 있습니다. 기존 역할 목록에서 적절한 링크를 클릭하여 기존 역할을 관리하거나 삭제할 수 있습니다.
역할을 관리할 때 아래와 같이 사용자를 추가하거나 제거할 수 있습니다.
그림 7
사용자가 역할에 있는지 확인란을 선택하면 특정 역할에 사용자를 쉽게 추가할 수 있습니다. ASP.NET 멤버 자격 데이터베이스를 적절한 항목으로 자동으로 업데이트합니다. 또한 애플리케이션에 대한 액세스 규칙을 구성하려고 합니다. ASP.NET 1.x 개발자는 web.config 파일의 <권한 부여> 요소를 통해 이 작업을 수행하는 데 익숙하며 해당 옵션은 ASP.NET 2.0에서 계속 사용할 수 있습니다. 그러나 아래와 같이 웹 사이트 관리 도구를 사용하여 액세스 규칙을 보다 쉽게 관리할 수 있습니다.
그림 8
이 경우 관리 폴더가 강조 표시되고(도구가 연한 회색으로 강조 표시되어 보기 어렵기 때문에) 관리자 역할에 액세스 권한이 부여되었습니다. 다른 모든 사용자는 거부됩니다. 머리 아이콘을 클릭하여 규칙을 선택한 다음 위로 이동 및 아래로 이동 단추를 사용하여 규칙을 정렬할 수 있습니다. ASP.NET <권한 부여> 요소와 마찬가지로 규칙은 표시되는 순서대로 처리됩니다. 즉, 위의 샷에서 규칙의 순서가 반전되면 ASP.NET 첫 번째 규칙이 폴더에 대한 모든 사람을 거부하는 규칙이기 때문에 아무도 관리 폴더에 액세스할 수 없습니다.
ASP.NET 2.0은 액세스 규칙을 지정하는 폴더에 web.config 파일을 추가합니다. 액세스 규칙은 구성 파일 또는 웹 사이트 관리 도구를 통해 편집할 수 있습니다. 즉, 웹 사이트 관리 도구는 사용자 친화적인 환경에서 구성 파일을 편집할 수 있는 인터페이스일 뿐입니다.
코드에서 역할 사용
역할 관리를 위한 API는 버전 1.x 이후 변경되지 않았습니다. IsInRole 메서드는 사용자가 특정 역할에 있는지 확인하는 데 사용됩니다.
if (User.IsInRole(Administrators)) {
btnManageSite.Visible = true;
}
또한 ASP.NET RolePrincipal instance 현재 컨텍스트의 멤버로 만듭니다. RolePrincipal 개체를 사용하여 사용자가 속한 모든 역할을 다음과 같이 가져올 수 있습니다.
string[] userRoles = ((RolePrincipal)User).GetRoles();
LoginView 컨트롤과 함께 RoleGroups 사용
역할 관리 및 멤버 자격을 이해했으므로 이제 LoginView 컨트롤이 ASP.NET 2.0에서 이 기능을 활용하는 방법을 간략하게 설명합니다. 앞에서 설명한 대로 LoginView 컨트롤은 기본적으로 두 개의 템플릿을 포함하는 템플릿으로 된 컨트롤입니다. AnonymousTemplate 및 LoggedInTemplate입니다. LoginView 작업 대화 상자 내에는 RoleGroups를 편집할 수 있는 링크(아래 참조)가 있습니다.
그림 9
각 RoleGroup 개체에는 RoleGroup이 적용되는 역할을 정의하는 문자열 배열이 포함되어 있습니다. LoginView 컨트롤에 새 RoleGroup을 추가하려면 RoleGroups 편집 링크를 클릭합니다. 위의 이미지에서 관리자를 위한 새 RoleGroup을 추가한 것을 볼 수 있습니다. 보기 드롭다운에서 RoleGroup(RoleGroup[0])을 선택하면 관리자 역할의 멤버에게만 표시되는 템플릿을 구성할 수 있습니다. 아래 이미지에서 영업 역할 및 배포 역할의 멤버에 적용되는 새 RoleGroup을 추가했습니다. 그러면 LoginView 작업 대화 상자의 보기 드롭다운에 두 번째 RoleGroup이 추가되고 해당 템플릿에 추가된 모든 항목은 영업 또는 배포 역할의 모든 사용자가 볼 수 있습니다.
그림 10
기존 멤버 자격 공급자 재정의
ASP.NET 멤버 자격의 기능을 확장할 수 있는 몇 가지 방법이 있습니다. 우선 SqlMembershipProvider 클래스에서 상속하고 메서드를 재정의하여 기존 기능을 변경할 수 있습니다. 예를 들어 사용자를 만들 때 고유한 기능을 구현하려는 경우 다음과 같이 SqlMembershipProvider에서 상속하는 고유한 클래스를 만들 수 있습니다.
public class jForumMembershipProvider : SqlMembershipProvider {
public jForumMembershipProvider() {
}
public override MembershipUser CreateUser(
string username,
string password,
string email,
string passwordQuestion,
string passwordAnswer,
bool isApproved,
object providerUserKey,
out MembershipCreateStatus status) {
// your own implementation
return base.CreateUser(
username,
password,
email,
passwordQuestion,
passwordAnswer,
isApproved,
providerUserKey,
out status);
}
}
반면에 사용자 고유의 공급자를 만들려는 경우(예: Access 데이터베이스에 멤버 자격 정보를 저장하기 위해) 고유한 공급자를 만들 수 있습니다.
사용자 고유의 멤버 자격 공급자 만들기
고유한 멤버 자격 공급자를 만들려면 먼저 MembershipProvider 클래스에서 상속되는 클래스를 만들어야 합니다. VB.NET 사용하는 경우 Visual Studio 2005는 재정의해야 하는 모든 메서드에 대한 스텁을 추가합니다. C#을 사용하는 경우 스텁을 추가할 수 있습니다.
다음을 재정의해야 합니다.
- ApplicationName 속성
- ChangePassword 함수
- ChangePasswordQuestionAndAnswer 함수
- CreateUser 함수
- DeleteUser 함수
- EnablePasswordReset 속성
- EnablePasswordRetrieval 속성
- FindUsersByEmail 함수
- FindUsersByName 함수
- GetAllUsers 함수
- GetNumberOfUsersOnline 함수
- GetPassword 함수
- GetUser 함수
- GetUserNameByEmail 함수
- MaxInvalidPasswordAttempts 속성
- MinRequiredNonAlphanumericCharacters 속성
- MinRequiredPasswordLength 속성
- PasswordAttemptWindow 속성
- PasswordFormat 속성
- PasswordStrengthRegularExpression 속성
- RequiresQuestionAndAnswer 속성
- RequiresUniqueEmail 속성
- ResetPassword 함수
- 사용자 함수 잠금 해제
- UpdateUser 함수
- ValidateUser 함수
C# 개발자로 구현할 수 있는 목록입니다. 구현 없이 VB.NET 클래스를 만든 다음 .NET Reflector 또는 유사한 도구를 사용하여 코드를 C#으로 변환하는 것이 더 쉬울 수 있습니다.
연결 문자열 및 기타 속성은 Initialize 메서드에서 기본값으로 설정해야 합니다. (Initialize 메서드는 런타임에 공급자가 로드될 때 발생합니다.) Initialize 메서드에 대한 두 번째 매개 변수는 System.Collections.Specialized.NameValueCollection 형식이며 web.config 파일에서 사용자 지정 공급자와 연결된 add> 요소에 대한 참조<입니다. 해당 항목은 다음과 같습니다.
<system.web>
<authentication mode="Forms"/>
<membership
defaultProvider="jForumCustomMembershipProvider" >
<providers>
<add name="jForumCustomMembershipProvider"
type="jForumCustomMembershipProvider"
requiresQuestionAndAnswer="true"
connectionString="Provider=Microsoft.Jet.
OLEDB.4.0;Data Source=C:\jForumCustomMembershipProvider\
App_Data\Members.mdb;Persist Security
Info=False"
/>
</providers>
</membership>
</system.web>
다음은 Initialize 메서드의 예입니다.
public override void Initialize(string name,
System.Collections.Specialized.NameValueCollection config) {
if (config["requiresQuestionAndAnswer"])
_requiresQuestionAndAnswer = true;
_connString = config["connectionString"];
base.Initialize(name, config);
}
사용자가 로그인 양식을 제출할 때 유효성을 검사하려면 ValidateUser 메서드를 사용해야 합니다. 이 메서드는 사용자가 로그인 컨트롤에서 로그인 단추를 클릭할 때 발생합니다. 이 메서드에서 사용자 조회를 수행하는 코드를 배치합니다.
보듯이 사용자 고유의 멤버 자격 공급자를 작성하는 것은 어렵지 않으며 ASP.NET 2.0의 강력한 기능을 확장할 수 있습니다.