번역 책임의 한계:
본 기사는 어느 정도의 인간의 간섭과 사후 편집을 포함하여 컴퓨터 소프트웨어 프로그램으로 번역되었습니다. 번역은 독자의 편리함을 위해 “있는 그대로” 제공되며, Sun은 번역된 문장 또는 페이지 전체로서의 정확성 또는 완전성에 대한 아무런 대표성이 없으며 어떠한 책임도 지지 않습니다. 사이트와 툴의 사용에 관한 추가 고지 사항에 대해서는 본 사이트의 이용 약관을 참조하십시오.
주: 2부: Sun Java System Access Manager 및 SharePoint Portal Server 2003, 3부: Sun Java System Access Manager 및 Microsoft Outlook Web Access for Exchange Server 2003을 참조하십시오.
전체 2부로 구성된 기사 중 첫 번째인 이 기사에서는 Microsoft Internet Information Server(IIS)용 Sun Java System Access Manager(이하 Access Manager) 및 Sun Java System Access Manager Policy Agent(이하 Policy Manager)를 사용하여 ASP(Active Server Pages)와 ASP.NET 응용 프로그램을 SSO(Single Sign-On) 환경으로 통합하는 방법에 대해 설명합니다. 특히 이 기사에서는 다음을 다룹니다.
Access Manager와 Microsoft 기술 간의 상호 운용성을 논의합니다.
Access Manager, Policy Agent, IIS 및 .NET 응용 프로그램 간의 상호 작용을 검토하고 Access Manager를 .NET 환경 및 .NET ASP 이전 응용 프로그램으로 통합하는 방법에 대해 설명합니다.
IIS 스레드가 Windows의 ACL(액세스 제어 목록)에 따라 사용자를 "가장"하여 자원에 대한 권한을 얻을 수 있도록 IIS를 보다 심도 있게 통합하는 구성 방법을 설명합니다.
이 기사에서는 Access Manager 및 IIS에 어느 정도 익숙함을 가정합니다.
주: Policy Agent 2.1은 IIS 5.0(Windows 2000)에 사용할 수 있고 Policy Agent 2.1 및 2.2는 IIS 6.0(Windows 2003)에 사용할 수 있습니다. 이 기사에서의 절차는 IIS 6.0용 Policy Agent 2.2-01을 기반으로 합니다.
두 가지 경우 모두 HTTP_COMMON_NAME 변수는 설정되어 있지 않습니다. 이 기사의 뒷부분에서 Policy Agent가 이러한 설정을 처리하는 방법을 살펴볼 수 있습니다.
IIS에 의한 권한 부여
이 섹션에서는 ASP.NET의 두 가지 권한 부여 메커니즘인 파일 권한 부여 및 URL 권한 부여에 의하여 자원 액세스에 대해 사용자에게 권한을 부여하는 방법에 대해 설명합니다.
파일 권한 부여
인증되지 않은 액세스로부터 파일을 보호하려면 Windows의 내장 ACL 메커니즘을 사용합니다. 다음 예에서 한 명의 사용자만이 파일을 읽을 수 있도록 파일에 ACL을 설정합니다. 해당 사용자가 로그인한 후 IIS는 파일 내용을 검색하기 위해 스크립트를 실행합니다.
다음을 수행합니다.
기본 ASP와 ASP.NET의 프로그래밍 모델상의 차이를 수용하는 두 스크립트를 작성합니다. 첫 번째는 기본 ASP 버전(bilbo.asp)입니다.
% @Language="VBScript" %>
<html>
<head>
<title>bilbo's secret file</title>
</head>
<body>
<h3>bilbo's secret file</h3>
<p>
<%
Err.Clear
On Error Resume Next
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
Dim fileName
fileName = Server.MapPath("bilbo.txt")
Dim file
Set file = fso.OpenTextFile(fileName)
If Err.Number = 0 Then
Response.Write(file.ReadAll)
Else
Response.Write("Sorry, " + Request.ServerVariables("LOGON_USER") + ", I
can't show you the file.")
End If
On Error GoTo 0
%>
</p>
</body>
</html>
Second, the ASP.NET version (bilbo.aspx):
<%@ Import Namespace="System.IO" %>
<%@ Language="VBScript" %>
<html>
<head>
<title>bilbo's secret file</title>
</head>
<body>
<h3>bilbo's secret file</h3>
<p>
<%
Try
Dim fileName as String = Server.MapPath("bilbo.txt")
Dim reader as StreamReader
reader = File.OpenText(fileName)
Response.Write( reader.ReadToEnd() )
reader.Close()
Catch uae as UnauthorizedAccessException
' Environment.UserName tells us the identity associated with the
' IIS process as far as the rest of Windows is concerned
Response.Write ("Sorry, " +
System.Security.Principal.WindowsIdentity.GetCurrent().Name + ", I can't show you the file.")
End Try
%>
</p>
</body>
</html>
다음과 같이 앞의 두 스크립트가 읽을 수 있도록 테스트 파일(bilbo.txt)을 작성합니다.
One identity to rule them all and, in the darkness, bind them.
예를 들어 문서 루트(기본적으로 c:\inetpub\wwwroot)와 같이 편리한 위치에 세 파일 모두를 둡니다.
bilbo.txt 파일을 bilbo만이 읽을 수 있도록 설정합니다.
bilbo 또는 관리자 권한을 가진 사용자로 로그인합니다.
bilbo.txt를 마우스 오른쪽 버튼으로 누르고 컨텍스트 메뉴에서 속성을 선택합니다.
bilbo.txt 속성 창이 표시됩니다.
보안 탭을 누른 다음 고급을 누릅니다.
bilbo.txt에 대한 고급 보안 설정 창이 표시됩니다.
상속 가능한 권한 허용을 선택 해제합니다.
확인 프롬프트가 표시됩니다.
제거를 클릭합니다.
고급 보안 설정 창에서 확인을 누릅니다.
보안 설정에 bilbo를 추가합니다. 추가를 누르고 bilbo를 객체 이름으로 입력한 다음 확인을 누릅니다.
bilbo.txt 속성 창이 다시 표시됩니다.
Bilbo Baggins의 권한에서 읽기를 선택하고 모든 다른 권한을 선택 해제합니다. 확인을 누릅니다.
마지막으로, IIS를 다시 익명 액세스로 설정합니다. 다음을 수행합니다.
IIS 관리자에서 사이트 이름을 마우스 오른쪽 버튼으로 누르고 컨텍스트 메뉴에서 속성을 선택합니다.
기본 웹 사이트 속성 창이 표시됩니다.
디렉터리 보안 탭을 누른 다음 인증 및 액세스 제어 아래의 편집 버튼을 누릅니다.
인증 방법 창이 표시됩니다.
익명 액세스 가능을 선택하고 기본 인증을 선택 해제합니다.
이제 bilbo.txt에 대한 권한이 설정되었으므로 bilbo.asp 및 bilbo.aspx 스크립트 모두 해당 파일에 액세스할 수 없다고 보고합니다. 출력은 다음과 같습니다.
http://win2k3-iis/bilbo.asp
bilbo's secret file
Sorry, I can't show you the file.
http://win2k3-iis/bilbo.aspx
bilbo's secret file
Sorry, WIN2K3-IIS\IUSR_WIN2K3-IIS, I can't show you the file.
ASP.NET 출력은 IIS가 시스템 ID WIN2K3-IIS\IUSR_WIN2K3-IIS의 컨텍스트에서 실행되고 있음을 보여줍니다. 이는 인증되지 않은 사용자를 대신하여 특별히 IIS가 사용하는 상대적으로 권한이 없는 계정입니다.
기본 인증
다음으로 기본 인증에 대한 IIS를 구성합니다.
IIS 관리자에서 사이트 이름을 마우스 오른쪽 버튼으로 누르고 컨텍스트 메뉴에서 속성을 선택합니다.
디렉터리 보안 탭을 누른 다음 인증 및 액세스 제어 아래의 편집 버튼을 누릅니다.
인증 방법 창이 표시됩니다.
익명 액세스 가능을 선택 해제하고 기본 인증을 선택합니다.
테스트로, bilbo의 두 가지 개인 페이지 http://win2k3-iis/bilbo.asp 및 http://http://win2k3-iis/bilbo.aspx에 각각 액세스합니다. 올바른 결과는 다음과 같습니다.
기본 ASP에서는 다음 출력에 표시된 것과 같이 bilbo의 비밀 파일을 읽을 수 있습니다.
http://win2k3-iis/bilbo.asp
bilbo's secret file
One identity to rule them all and, in the darkness, bind them.
ASP.NET에서는 다음 출력에 표시된 것과 같이 해당 파일을 읽을 수 없습니다.
http://win2k3-iis/bilbo.aspx
bilbo's secret file
Sorry, NT AUTHORITY\NETWORK SERVICE, I can't show you the file.
왜일까요? 기본 ASP 모델에서는 IIS가 기본적으로 인증된 사용자로 가장하므로 IIS와 bilbo.asp 모두 bilbo.txt에 액세스할 수 있습니다. ASP.NET에서는 그렇지 않습니다. 사용자 인증 후에도 IIS가 상대적으로 권한이 없는 시스템 계정(IIS 6.0의 경우 NT AUTHORITY\NETWORK SERVICE)의 컨텍스트에서 실행되므로 액세스가 거부됩니다.
해결책으로 web.config 파일을 통해 사용자로 가장하도록 ASP.NET을 구성합니다. 다음과 같이 원하는 디렉토리(예: IIS 루트 문서 폴더(wwwroot))에 해당 파일을 작성합니다.
이제 bilbo로 http://win2k3-iis/bilbo에 액세스합니다. 출력은 권한 부여가 성공적임을 나타냅니다.
Reminder: Throw ring in Mount Doom!
bilbo로 인증되지 않은 경우 브라우저에 따라 IIS는 반복적으로 인증서를 다시 입력하라고 메시지를 표시합니다. 세 번의 시도 실패 후 IIS는 다음과 같은 메시지를 표시합니다.
Server Error in '/' Application.
Access is denied.
Description: An error occurred while accessing the resources
required to serve this request. The server may not be configured
for access to the requested URL.
Error message 401.2.: Unauthorized: Logon failed due to server
configuration. Verify that you have permission to view this
directory or page based on the credentials you supplied and the
authentication methods enabled on the Web server. Contact the Web
server's administrator for additional assistance.
이 기사의 나머지 부분에서는 Access Manager에서 동일한 정책을 구성하는 방법에 대해 설명합니다. 또한 Access Manager 정책으로의 마이그레이션이 비실용적인 경우 Access Manager를 사용하여 ASP.NET의 URL 권한 부여를 통합하는 방법에 대해서도 설명합니다.
IIS 6.0용 Policy Agent 2.2 배포
Policy Agent는 가장 간단한 구성에서 인증되지 않은 액세스로부터 자원(이 컨텍스트에서는 IIS의 일련의 URL)을 보호합니다. 사용자가 보호된 자원에 액세스하려고 시도하면 Policy Agent가 로그인 페이지를 표시하여 해당 사용자의 이후 인증을 가정하고 Access Manager의 정책과 논의하여 요청된 자원에 대한 권한을 부여할지 결정합니다.
ISAPI(Internet Server API) 응용 프로그램으로서 Policy Agent는 웹 사이트에 매핑되는 와일드카드 응용 프로그램으로 배포됩니다. Policy Agent는 배포되면 해당 사이트의 자원에 대한 액세스 요청을 인터셉트하고 인증 및 정책 평가 작업을 수행합니다. 모든 정책 조건이 충족되면 Policy Agent는 자원에 대한 권한을 부여합니다.
응용 프로그램 풀당 하나의 사이트에 대해 Policy Agent를 구성합니다. 따라서 하나의 시스템에 여러 사이트를 구성하려면 해당 사이트들을 다중 응용 프로그램 풀로 구성합니다.
더욱이 Policy Agent는 URL 정책을 적용하고 사용자 이름, 공통 이름 등과 같은 사용자 프로필 속성을 HTTP 헤더 변수로 복사할 수 있으므로 IIS 응용 프로그램은 인증된 사용자의 ID를 찾을 수 있습니다.
이점
Access Manager 및 Policy Agent는 다음과 같이 웹 서버 수준에서 인증 및 권한 부여를 관리할 수 있는 여러 이점을 제공합니다.
인증은 Access Manager에 집중화되어 있습니다. 사용자 이름 및 비밀번호에서 인증서에 이르기까지 다양한 인증 메커니즘을 사용하고 스마트 카드 및 하드웨어 토큰과 작동하도록 Access Manager를 구성할 수 있습니다. 사용자 정의 메커니즘을 사용하여 Access Manager를 확장할 수도 있습니다.
권한 부여는 전체 엔터프라이즈에 적용되는 일련의 정책에 집중화되어 있습니다. 정책은 "bilbo에게 액세스 허용" 및 "영업 역할을 가진 사용자에게 액세스 거부"와 같은 일반적인 것에 비해 훨씬 더 정교합니다. 예를 들어, 다음과 같은 조건을 포함할 수 있습니다.
"이 페이지에는 스마트 카드 인증이 필요합니다."와 같은 특정 인증 메커니즘
다음과 같은 시간 및 날짜
"월요일 - 금요일 오전 9시 - 오후 5시 일반 사용자에게 액세스 허용"
"연중무휴 관리자에게 액세스 허용"
"VPN을 통해 로그인하는 사용자에게 액세스 거부"
Policy Agent는 다양한 웹 컨테이너 및 응용 프로그램에서 사용할 수 있습니다. Sun Java System Web Server 및 Sun Java System Application Server에서 SAP Enterprise Portal 및 Lotus Domino에 이르는 이러한 컨테이너 및 응용 프로그램이 해당합니다(Policy Agent 다운로드 사이트 참조). Access Manager의 C 및 Java SDK를 사용하여 응용 프로그램에서 인증 및 권한 부여를 추출할 수도 있습니다.
SSO는 모든 보호된 자원에 걸쳐 사용할 수 있습니다. SAML 2.0 및 Liberty 표준을 통해 엔터프라이즈에 걸쳐 SSO를 확장하는 Access Manager의 통합 기능 때문입니다.
Access Manager 콘솔에 로그인하여 모든 인증된 사용자가 IIS 서버의 모든 URL에 액세스할 수 있도록 허용하는 정책 즉, http://win2k3-iis/*를 작성합니다.
AMAgent.properties configuration 파일을 편집합니다. Policy Agent가 HTTP 헤더로 HTTP 요청에 사용자 속성을 삽입하도록 com.sun.am.policy.agents.config.profile.attribute.fetch.mode를 HTTP_HEADER로 설정합니다.
com.sun.am.policy.agents.config.profile.attribute.map 특성은 어떤 속성을 삽입할지와 이름을 매핑하는 방법을 Policy Agent에 알립니다.
응용 프로그램 풀 및 웹 사이트를 다시 시작합니다.
Access Manager에서 ID(uid)가 사용자의 Windows 사용자 이름에 해당하는 사용자를 만듭니다.
이 연습에서는 두 시스템에 있는 ID 간의 간단한 대응을 사용합니다. com.sun.am.policy.am.userid.param 특성은 어떤 Access Manager 세션 특성을 Windows 사용자 이름에 매핑할지 Policy Agent에 알립니다.
IIS 인증 없음
IIS가 익명 액세스를 할 수 있도록 구성하려면 IIS를 다시 익명 액세스로 설정합니다. 다음 단계를 수행합니다.
IIS 관리자에서 사이트 이름을 마우스 오른쪽 버튼으로 누르고 컨텍스트 메뉴에서 속성을 선택합니다.
기본 웹 사이트 속성 창이 표시됩니다.
디렉터리 보안 탭을 누른 다음 인증 및 액세스 제어 아래의 편집 버튼을 누릅니다.
인증 방법 창이 표시됩니다.
익명 액세스 가능을 선택하고 기본 인증을 선택 해제합니다.
기본 ASP 동작
위의 설정을 사용하더라도 Policy Agent는 여전히 환영 스크립트에 액세스하려는 시도를 인터셉트하고 사용자의 브라우저를 Access Manager의 로그인 페이지로 리디렉션합니다. Access Manager 사용자 bilbo로 로그인한 후 welcome.asp에 다음과 같은 출력이 표시됩니다.
http://win2k3-iis/welcome.asp
Welcome, Bilbo Baggins!
REMOTE_USER bilbo
LOGON_USER bilbo
AUTH_USER bilbo
HTTP_COMMON_NAME Bilbo Baggins
첫 번째 세 개의 변수 값은 기본 인증의 스크립트에 의한 출력과 동일합니다. HTTP_COMMON_NAME의 경우 Access Manager는 이 프로토콜의 결과로 사용자의 LDAP 프로필에서 cn 속성의 검색 결과를 생성합니다.
AMAgent.properties 파일의 com.sun.am.policy.agents.config.profile.attribute.map 특성은 cn에서 common-name으로의 매핑을 정의하고 Access Manager는 이를 다시 HTTP_COMMON_NAME으로 매핑합니다.
Access Manager 및 Policy Agent가 동일한 방법으로 사용자의 LDAP 프로필의 다른 속성을 검색하도록 할 수 있습니다.
ASP.NET 동작
대조적으로 ASP.NET에서 welcome.aspx를 실행하면 다음과 같은 출력이 표시됩니다.
http://win2k3-iis/welcome.aspx
Welcome, Bilbo Baggins!
REMOTE_USER WIN2K3-IIS\IUSR_WIN2K3-IIS
LOGON_USER bilbo
AUTH_USER WIN2K3-IIS\IUSR_WIN2K3-IIS
HTTP_COMMON_NAME Bilbo Baggins
여기에서 IIS는 REMOTE_USER 및 AUTH_USER 변수를 WIN2K3-IIS\IUSR_WIN2K3-IIS, IIS용 기본 익명 시스템 사용자로 설정합니다. Policy Agent가 bilbo로 사용자를 인증하고 시스템 수준에서 LOGON_USER를 설정했더라도 IIS는 여전히 해당 요청을 익명으로 간주합니다.
액세스 거부
이제 기본 ASP를 사용하여 bilbo의 비밀 파일에 액세스하면 다음과 같은 거부 메시지가 표시됩니다.
http://win2k3-iis/bilbo.asp
bilbo's secret file
Sorry, I can't show you the file.
ASP.NET에서도 마찬가집니다.
http://win2k3-iis/bilbo.aspx
bilbo's secret file
Sorry, WIN2K3-IIS\IUSR_WIN2K3-IIS, I can't show you the file.
두 경우 모두에서 IIS는 해당 파일에 액세스할 수 없습니다. Policy Agent가 사용자를 인증했더라도 IIS 파일 권한 부여 메커니즘은 여전히 해당 액세스를 익명으로 간주합니다. 다음 섹션에서 해결책을 참조하십시오.
bilbo's secret file
Sorry, frodo, I can't show you the file.
http://win2k3-iis/bilbo.aspx
bilbo's secret file
Sorry, MYDOMAIN\frodo, I can't show you the file.
따라서 기본 인증 및 가장에 대해 IIS가 구성된 상태에서 Policy Agent는 디스크의 파일 액세스 수준까지 IIS를 Access Manager 인프라에 통합합니다.
URL 권한 부여
앞의 구성에 뒤이어 URL 권한 부여의 동작을 보려면 먼저 bilbo로 bilbo의 디렉토리에 있는 스크립트에 액세스합니다. 성공을 입증하는 출력은 다음과 같습니다.
http://win2k3-iis/bilbo
Reminder: throw ring in Mount Doom!
다음으로, frodo로 로그인합니다. 앞에서 설명한 대로 동일한 반응 즉, 인증서를 다시 입력하라는 메시지가 표시됩니다. 세 번의 시도 실패 후 IIS는 다음과 같은 오류 메시지를 표시합니다.
Server Error in '/' Application.
Access is denied.
Description: An error occurred while accessing the resources
required to serve this request. The server may not be configured
for access to the requested URL.
Error message 401.2.: Unauthorized: Logon failed due to server
configuration. Verify that you have permission to view this
directory or page based on the credentials you supplied and the
authentication methods enabled on the Web server. Contact the Web
server's administrator for additional assistance.
결론
IIS 인증 메커니즘을 사용하는 .NET 웹 응용 프로그램의 경우 Policy Agent가 이 응용 프로그램에 대한 SSO 및 액세스 제어를 관리하도록 IIS를 다시 구성할 수 있습니다. 자체 인증을 수행하는 응용 프로그램(예: 플랫 파일 또는 데이터베이스)의 경우 인증 코드를 삭제하고 대신 LOGON_USER 서버 변수를 사용하기만 하면 됩니다.
향후 기사 미리보기
향후 기사에서는 Access Manager를 SharePoint Portal Server 2003 및 Microsoft Exchange 2003의 Outlook Web Access와 통합하는 방법에 대해 설명합니다 .
감사의 말씀
이 기사가 게시되기 전에 자세히 검토하고 여러 개선 사항을 제안해준 Microsoft ASP.NET 팀의 Stefan Schakow의 공헌에 깊은 감사를 드립니다. 오류가 있는 경우 이는 물론 저자들의 책임입니다.