코드 샘플: ASP.NET MVC 3 사용자 지정 로그인 페이지
업데이트: 2015년 6월 19일
Azure에 적용합니다.
이 샘플에서는 Microsoft Azure Active Directory Access Control(Access Control Service 또는 ACS라고도 함)를 사용하는 ASP.NET MVC3 애플리케이션에서 사용자 지정 로그인 또는 홈 영역 검색 페이지를 만드는 방법을 보여 줍니다. 이 샘플의 코드는 ACS(Microsoft Azure Active Directory Access Control) 코드 샘플 패키지의 MVC3CustomSignInPage(C#\Websites\MVC3CustomSignInPage) 하위 디렉터리에 있습니다.
사전 요구 사항
이 샘플을 실행하려면 다음이 필요합니다.
Azure Portal 계정 및 Access Control 네임스페이스입니다.
Visual Studio 2010(모든 버전)
Windows Identity Foundation SDK
자세한 내용은 ACS 필수 구성 요소 (https://go.microsoft.com/fwlink/?LinkId=221065)를 참조하세요.
샘플 구성
이 샘플에 필요한 ACS 구성은 ACS 관리 포털 또는 ACS 관리 서비스를 사용하여 수행할 수 있습니다. 이 항목에서는 두 옵션을 모두 설명합니다.
옵션 1: ACS 관리 포털을 통해 샘플 구성
ACS 관리 포털에서 샘플을 구성하려면
Microsoft Azure 관리 포털(https://manage.WindowsAzure.com)로 이동하여 로그인한 다음 Active Directory를 클릭합니다. (문제 해결 팁: "Active Directory" 항목이 없거나 사용할 수 없음)
Access Control 네임스페이스를 만들려면 새로 만들기, App Services, Access Control, 빨리 만들기를 차례로 클릭합니다. 또는 새로 만들기를 클릭하기 전에 Access Control 네임스페이스를 클릭합니다.
Access Control 네임스페이스를 관리하려면 네임스페이스를 선택한 다음 관리를 클릭합니다. 또는 Access Control 네임스페이스를 클릭하고 네임스페이스를 선택한 다음 관리를 클릭합니다.
이 작업을 수행하면 액세스 제어 서비스 관리 포털이 열립니다.
ID 공급자와의 관계를 설정하려면 ID 공급자를 클릭하고 Google, Yahoo!, Facebook 등 사용할 ID 공급자를 선택합니다. Facebook의 필수 구성 요소 키를 가져오는 방법에 대한 자세한 내용은 방법: Facebook을 ID 공급자로 구성 (https://go.microsoft.com/fwlink/?LinkId=221151)을 참조하세요. 그런 다음 페이지의 왼쪽 탐색 메뉴에서 홈 링크를 클릭하여 기본 페이지로 돌아옵니다.
ACS에 애플리케이션을 등록하려면 Access Control 서비스 관리 포털에서 기본 페이지에 있는 신뢰 당사자 애플리케이션 링크를 클릭하고 추가를 선택하고 양식에 다음 정보를 입력합니다.
이름 필드에 ASPNET MVC3 사용자 지정을 입력합니다.
In the Realm field, enter https://localhost:64000/
In the Return URL field, enter https://localhost:64000/Account/SignIn
토큰 형식 필드에서 SAML 2.0을 선택합니다.
ID 공급자 섹션에서 Facebook, Google, Windows Live ID 및 Yahoo!를 선택합니다.
토큰 서명 필드에서 서비스 네임스페이스 인증서(표준) 사용을 선택합니다.
저장을 클릭하고 기본 페이지로 이동합니다.
신뢰 당사자 애플리케이션을 구성하면 이제 ACS가 애플리케이션에 발급할 클레임을 결정하는 규칙을 만들어야 합니다. 이 샘플에서는 ID 공급자가 발급하는 모든 클레임을 통과시킵니다. 이 규칙을 만들려면 기본 페이지에 있는 규칙 그룹을 클릭하고 ASPNET MVC3 사용자 지정의 기본 규칙 그룹을 클릭합니다.
페이지 맨 아래에서 생성 링크를 클릭합니다. Facebook, Yahoo가 선택되어 있는지 확인하고 생성을 클릭합니다.
ACS가 구성된 상태에서 Visual Studio 엽니다.
옵션 2: ACS 관리 서비스를 사용하여 샘플 구성
Visual Studio 샘플 솔루션에는 ACS 관리 서비스와 Common 클래스 라이브러리에 정의된 공통 도우미를 사용하는 ConfigureSample이라는 명령줄 애플리케이션이 있습니다. 이 애플리케이션은 이 샘플에서 사용할 Access Control 네임스페이스를 구성하는 데 사용할 수 있습니다.
ACS 관리 서비스를 사용하여 샘플을 구성하려면
Access Control 네임스페이스에 대한 정보로 Common 클래스 라이브러리를 업데이트합니다. SamplesConfiguration.cs를 열고 다음 정보를 입력합니다.
ServiceNamespace - ACS와 함께 사용되는 네임스페이스입니다.
ManagementServiceIdentityName - 관리 서비스 계정의 이름입니다.
ManagementServiceIdentityKey - 관리 서비스 계정에 연결된 암호입니다.
AcsHostUrl - ACS의 호스트 이름입니다.
ConfigureSample 프로젝트에서 Program.cs를 열고 다음 정보를 입력합니다.
applicationId - Facebook 응용 프로그램 ID입니다.
applicationSecret - Facebook 응용 프로그램 암호입니다.
이러한 키를 가져오는 방법에 대한 자세한 내용은 방법: Facebook을 ID 공급자로 구성 (https://go.microsoft.com/fwlink/?LinkId=221151)을 참조하세요.
이 샘플을 실행하도록 ACS를 구성하는 Visual Studio ConfigureSample 애플리케이션을 실행합니다.
샘플 실행
이 샘플을 실행하려면
Visual Studio Websites\MVC3CustomSignInPage\MVC3CustomSignInPage.sln에 있는 샘플을 엽니다.
ACS를 STS 참조로 추가하려면 MVCCustomSignInPage 를 마우스 오른쪽 단추로 클릭하고 상황에 맞는 메뉴에서 STS 참조 추가 를 선택합니다.
대화 상자에서 웹 응용 프로그램 루트를 응용 프로그램 URI 필드에 입력하고 다음을 클릭합니다. 이 샘플의 경우 이 값은 https://localhost:64000/
참고
후행 슬래시는 신뢰 당사자를 위해 ACS에 입력한 값과 일치하기 때문에 중요합니다. 사이트에서 SSL을 사용하고 있지 않다는 경고가 마법사에 표시됩니다. 예 단추를 클릭하여 경고를 확인합니다. 프로덕션 웹 사이트의 경우 이러한 유형의 시나리오에서는 거의 대부분 SSL을 사용해야 합니다.
다음 창에서 기존 STS 라디오 사용 단추를 선택하고 Access Control 네임스페이스에서 게시한 WS-Federation 메타데이터의 URI를 입력합니다. 이 URI는 포털의 응용 프로그램 통합 아래에서 확인할 수 있습니다. Access Control 네임스페이스가 mvc3samples이면 URI가 https:// mvc3samples.accesscontrol.windows.net/FederationMetadata/2007-06/FederationMetadata.xml. 이 값을 입력한 후 다음을 클릭합니다.
웹 사이트에는 암호화된 토큰이 필요하지 않으므로 나머지 대화 상자에서는 다음을 클릭하고 마지막으로 마침을 클릭합니다.
이제 애플리케이션이 ASP .NET 담요 리소스 보호와 함께 ACS를 사용하도록 구성되었습니다. 보다 상세한 MVC3 인증 필터가 포함된 사용자 지정 로그온 페이지를 사용할 수 있도록 이 보호 기능을 비활성화해야 합니다. web.config 파일의 configuration 아래에서 다음 설정을 삭제합니다.
<location path="FederationMetadata"> <system.web> <authorization> <allow users="*" /> </authorization> </system.web> </location>
system.web 아래에서 다음 설정을 삭제합니다.
<authorization> <deny users="?" /> </authorization>
이 두 설정을 제거하면 ASP.NET에서 사용자를 대신해 인증 또는 권한 부여를 수행하지 않습니다.
Visual Studio F5 키를 눌러 애플리케이션을 실행합니다. 그러면 브라우저에 응용 프로그램의 기본 페이지가 표시됩니다.
오른쪽 위의 로그인 링크를 클릭하고 목록이 나타나면 ID 공급자를 선택합니다. 인증 후 홈 페이지로 돌아가면 사용자 정보가 오른쪽 위 모서리에 표시됩니다(사용자 이름을 제공하지 않음).
로그오프를 클릭하여 로그오프합니다. 그러면 세션 쿠키가 지워지고 다시 기본 페이지로 돌아갑니다.
디렉터리 링크를 클릭합니다. 이제 인증된 상태가 아니므로 디렉터리 페이지에 액세스하려면 ID 공급자를 선택하라는 메시지가 표시됩니다.
디렉터리 페이지(DirectoryController의 인덱스)는 RequireAuthenticationAttribute를 통해 보호되기 때문입니다. ID 공급자를 선택하고 인증을 하면 다시 디렉터리 페이지로 이동됩니다.