LDAP 폼 인증 구성 및 폼 인증 시 고려 사항

이 문서는 마이크로소프트의 공식 문서가 아닙니다. 공식적인 가이드는 technet.microsoft.com - Plan authentication settings for Web applications in Office SharePoint Server 를 참고 하시기 바랍니다.

 

안녕하세요. 저는 한국 MS의 MOSS 담당 TS인 송치훈 이라고 합니다. 아래 내용은 ASP.NET 의 LDAP 인증 프로바이더를 사용하여 폼 인증을 구성하는 법과 기술적으로 고려해야 할 사항, 제약 사항을 정리한 것입니다. MS 본사 엔지니어인 Steve Peschka의 게시글을 참고 하였으며 테스트는 직접 수행한 결과를 바탕으로 기술 하였습니다. 많은 참고가 되시길 바랍니다.

목차:

A. 기 구축된 웹 사이트의 인증 다중화

B. 폼 인증 기반의 신규 웹 어플리케이션 생성

C. 클라이언트 연동 테스트

 

A. 기 구축된 웹 사이트의 인증 다중화

아래 예제는 이미 AD 인증으로 구성된 사이트에 폼 인증을 추가하는 것을 보여주고 있습니다. 사이트를 완전히 폼 인증 기반으로 하고 싶으면 B 항목으로 가십시오.

1. 웹 어플리케이션 관리에서 웹 어플리케이션을 확장하여야 합니다. 웹 어플리케이션 생성 또는 확장 메뉴로 가십시오.

capture_61.jpg

2. 어플리케이션 확장을 선택합니다. 이 예제는 이미 구축된 사이트의 인증 방식을 다중화 하는 예제입니다.

capture_62.jpg

확장하고자 하는 기본 웹 어플리케이션을 선택합니다. (예 : 80번 포트 쓰는 것)

웹 어플리케이션의 포트를 부여합니다. (예 : 12345)

capture_64.jpg

Zone 을 반드시 바꾸어 주어야 합니다. 여기서는 “Extranet” 존을 선택합니다.

capture_65.jpg

3. 인증 프로바이더 메뉴로 갑니다.

capture_66.jpg

여기서 “Extranet” 존을 선택하여 이 존을 폼인증으로 구성합니다.

capture_67.jpg

웹 어플리케이션을 선택하고,

인증 타입 부분에서 폼 인증으로 선택해 줍니다.

capture_68.jpg

멤버십 프로바이더 이름과 롤 매니저 이름을 적어줍니다.

클라이언트 통합 부분을 사용하겠다고 체크합니다.

capture_69.jpg

4. IIS 가상 디렉토리로 가서 Web.config 를 수정합니다.

capture_71.jpg

5. 메모장이나 비쥬얼 스튜디오를 이용해서 <securityPolicy> 태그 앞에 다음 코드를 삽입합니다.

기본 LDAP 프로바이더 설정으로 AD 를 연결합니다.

<membership defaultProvider="Partners" userIsOnlineTimeWindow="15">

<providers>

<!--LDAP Provider-->

<add name="Partners"

type="Microsoft.Office.Server.Security.LDAPMembershipProvider,

Microsoft.Office.Server,

Version=12.0.0.0,

Culture=neutral,

PublicKeyToken=71E9BCE111E9429C"

server="moss.litwareinc.com"

port="389"

useSSL="false"

userDNAttribute="distinguishedName"

userNameAttribute="SAMAccountName"

userContainer="CN=Users,DC=litwareinc,DC=com"

userObjectClass="person"

userFilter="(|(ObjectCategory=group)(ObjectClass=person))"

scope="Subtree"

otherRequiredUserAttributes="sn,givenname,cn" />

</providers>

</membership>

<roleManager

defaultProvider="PartnerRoles"

enabled="true"

cacheRolesInCookie="true"

cookieName=".ASPROLES"

cookieTimeout="30"

cookiePath="/"

cookieRequireSSL="true"

cookieSlidingExpiration="true"

cookieProtection="All">

<providers>

<!--LDAP Role Provider-->

<add name="PartnerRoles"

type="Microsoft.Office.Server.Security.LDAPRoleProvider,

Microsoft.Office.Server,

Version=12.0.0.0,

Culture=neutral,

PublicKeyToken=71E9BCE111E9429C"

server="moss.litwareinc.com"

groupContainer="DC=litwareinc,DC=com"

groupNameAttribute="cn"

groupMemberAttribute="member"

userNameAttribute="SAMAccountName"

dnAttribute="distinguishedName"

groupFilter="(ObjectClass=group)"

scope="Subtree" />

</providers>

</roleManager>

저장하고 IISRESET 수행합니다.

6. 어플리케이션 관리 페이지로 가서

capture_72.jpg

사이트 컬렉션 관리자에서 Partners:administrator 라고 추가한 후

capture_73.jpg

이름 확인을 하면 이를 “administrator” 로 인식하는 것을 볼 수 있습니다.

capture_74.jpg

이는 내부적으로 계정 개체가 두 개 생긴 것입니다.

계정 검색을 해보면 실제로는 같은 계정이지만 두 개가 있는 것을 알 수 있습니다.

capture_75.jpg

하지만 다른 웹 어플리케이션에는 이 계정이 존재하지 않습니다.

웹 어플리케이션을 바꾸면 더 이상 Partners:administrator 는 검색되지 않습니다.

capture_76.jpg

그래서 새로 만든 폼 인증 으로 로그인 해 보면…

AD 계정으로는 로그인이 되지 않습니다. 인증 프로바이더가 인식하지 못하기 때문입니다.

capture_78.jpg

AD 를 LDAP 프로바이더로 연결할 지라도, 프로바이더가 틀리면 SharePoint는 완전히 다른 계정으로 인식합니다. 따라서, AD 로그인과 LDAP 프로바이더 로그인을 동시에 사용하는 유저는 “도메인 로그인한 상태에서 작성한 문서를 LDAP 폼인증으로 로그인하면 수정할 수 없는” 등의 문제를 겪을 수 있습니다 .

그냥 administrator 라고 치고 들어가야 인증을 통과합니다. 이것은 위에서의 “Partners:administrator” 입니다.

capture_79.jpg

여기서 Sign me in automatically 를 선택하면 persistent cookie 를 생성하게 됩니다.

B. 폼 인증 기반의 신규 웹 어플리케이션 생성

자 이번엔 새 웹 어플리케이션을 만들기로 폼인증을 구성해 보겠습니다.

응용 프로그램 관리에서 새 응용 프로그램 만들기부터 시작합니다.

인증 공급자 메뉴로 가서…

기본 인증을 폼 인증으로 바꿉니다.

편의상 앞에서 만들었던 LDAP 프로바이더를 재활용 합니다. (이름만 좀 바꿔서)

폼 인증을 위해서는

- 멤버십 프로바이더를 웹 어플리케이션(여기서는 12345)의 Web.config 에 추가

- 롤 매니저를 Web.config 에 추가

- 멤버십 프로바이더를 중앙 관리 사이트 Web.config 에 추가 (중요!)

해 주어야 합니다.

샘플 LDAP 멤버십 프로바이더는 아래와 같습니다.

<membership defaultProvider="LDAPMemProv" userIsOnlineTimeWindow="15">

<providers>

<!--LDAP Provider-->

<add name="LDAPMemProv"

type="Microsoft.Office.Server.Security.LDAPMembershipProvider,Microsoft.Office.Server,Version=12.0.0.0, Culture=neutral, PublicKeyToken=71E9BCE111E9429C" server="iwsoft2" port="389" useSSL="false" userDNAttribute="distinguishedName" userNameAttribute="SAMAccountName" userContainer="CN=Users,DC=iwsoft,DC=com" userObjectClass="person" userFilter="(|(ObjectCategory=group)(ObjectClass=person))" scope="Subtree" otherRequiredUserAttributes="sn,givenname,cn" />

</providers>

</membership>

<roleManager defaultProvider="LDAPRoleProv" enabled="true" cacheRolesInCookie="true" cookieName=".ASPROLES" cookieTimeout="30" cookiePath="/" cookieRequireSSL="true" cookieSlidingExpiration="true" cookieProtection="All">

<providers>

<!--LDAP Role Provider-->

<add name="LDAPRoleProv" type="Microsoft.Office.Server.Security.LDAPRoleProvider, Microsoft.Office.Server, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71E9BCE111E9429C" server="iwsoft2" groupContainer="DC=iwsoft,DC=com" groupNameAttribute="cn" groupMemberAttribute="member" userNameAttribute="SAMAccountName" dnAttribute="distinguishedName" groupFilter="(ObjectClass=group)" scope="Subtree" />

</providers>

</roleManager>

중앙 관리자의 Web.config 에 입력할 코드는 아래와 같습니다. 노란색으로 하이라이트 된 부분이 틀립니다. 이유는 중앙 관리 사이트는 폼인증을 사용하지 않기 때문에, 롤 프로바이더로 윈도우 인증을 사용하기 때문에 AspNetWindowsTokenRoleProvider 를 디폴트 프로바이더로 해 주어야 합니다.

<membership defaultProvider="LDAPMemProv" userIsOnlineTimeWindow="15">

<providers>

<!--LDAP Provider-->

<add name="LDAPMemProv"

type="Microsoft.Office.Server.Security.LDAPMembershipProvider,Microsoft.Office.Server,Version=12.0.0.0, Culture=neutral, PublicKeyToken=71E9BCE111E9429C" server="iwsoft2" port="389" useSSL="false" userDNAttribute="distinguishedName" userNameAttribute="SAMAccountName" userContainer="CN=Users,DC=iwsoft,DC=com" userObjectClass="person" userFilter="(|(ObjectCategory=group)(ObjectClass=person))" scope="Subtree" otherRequiredUserAttributes="sn,givenname,cn" />

</providers>

</membership>

<roleManager enabled="true" defaultProvider="AspNetWindowsTokenRoleProvider">

<providers>

<!--LDAP Role Provider-->

<add name="LDAPRoleProv" type="Microsoft.Office.Server.Security.LDAPRoleProvider, Microsoft.Office.Server, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71E9BCE111E9429C" server="iwsoft2" groupContainer="DC=iwsoft,DC=com" groupNameAttribute="cn" groupMemberAttribute="member" userNameAttribute="SAMAccountName" dnAttribute="distinguishedName" groupFilter="(ObjectClass=group)" scope="Subtree" />

</providers>

</roleManager>

기본 인증 공급자가 바뀐 것을 확인할 수 있습니다.

다음은 웹 응용 프로그램 정책 메뉴로 갑니다.

올바른 웹 어플리케이션을 선택하고 사람 검색을 클릭합니다.

여기서 계정이 검색되어야 합니다. 그렇지 않으면 프로바이더 코드가 잘못 된 것입니다. 또한 영역 선택에 주의해야 합니다. (만약 확장을 했을 경우)

계정이 추가 되었습니다.

다음은 사이트 컬렉션을 만듭니다. 역시 ldapmemprov:administrator 로 계정이 resolve 되어야 합니다.

Resolve 확인

사이트 모음을 만들고 들어가면 로그인 페이지를 볼 수 있어야 합니다.

로그인 해 들어가면 우측 상단에 내 사이트 링크가 나오지 않습니다.

당연합니다. Ldapmemprov:administrator 가 내 사이트 서비스를 받을 권한이 없기 때문입니다.

이 권한은 공유 서비스에서 주어야 합니다.

공유 서비스의 내 사이트 설정으로 가서…

기본 독자 사이트 그룹에서 사람 찾기를 누르고 administrator 를 찾아 보면, 폼인증 유저인 ldapmemprov:administrator 는 나오지 않을 것입니다. 이는 ldapmemprov:administrator 가 공유 서비스 웹 어플리케이션에 없기 때문입니다. (공유 서비스를 위한 웹 어플리케이션을 별도로 생성했을 경우입니다.)

폼인증 유저가 추가되도록 하기 위해서는 웹 어플리케이션 존을 추가해 주어야 합니다. 위의 웹 어플리케이션 확장의 경우와 마찬가지로, 다음 작업을 수행해 주어야 합니다.

- 공유 서비스 웹 어플리케이션을 확장하여 웹 어플리케이션을 하나 더 만들고

- 그 웹 어플리케이션을 폼인증으로 구성 (web.config 수정)

그런 이후에야 다음 처럼 폼인증 유저가 검색될 것입니다.

다음 단계로는 폼 인증 유저에게 내 사이트 서비스를 받을 수 있도록 권한을 줍니다.

개인 설정 서비스 권한에 들어가서 사용자 추가를 누르고…

폼인증 유저를 추가하면서, 개인사이트 만들기 권한과 개인 기능 사용 권한을 줍니다.

다음과 같이 추가 되었습니다.

이제 드디어 내 사이트 링크를 볼 수 있습니다.

C. 클라이언트 연동 테스트

폼 인증 구성시에는 기본으로 “클라이언트 통합” 기능이 비활성화 됩니다. 하지만 이를 활성화 시켰을 경우 어떠한 반응을 보이는지 테스트 합니다. 결론부터 말씀드리면 폼인증 구성 시 클라이언트 통합을 제대로 사용하려면 로그인 화면에서 “자동으로 로그인” 옵션으로 로그인 해야 합니다. 이 옵션을 사용하면 사용자의 PC에 persistent cookie 가 생성 되게 되며, 오피스 클라이언트는 이 정보를 기반으로 클라이언트와 상호 작용 하게 됩니다. 자동으로 로그인 옵션을 사용하지 않으면 세션 쿠키가 생기게 되고, 이는 메모리 기반으로, 웹 브라우저만이 엑세스 할 수 있습니다. Persistent cookie 가 생성되면 Office client 들이 이 정보를 읽어 추가 로그인 없이 MOSS 에 엑세스 할 수 있습니다. 세부 사항은 아래 테크넷 문서를 참고 부탁 드립니다.

(https://technet2.microsoft.com/Office/f/?en-us/library/d3e0e0fc-77b6-4109-87d6-53ad088db01d1033.mspx)

주의할 사항은, Persistent Cookie는 기본 만료 시간이 지정되어 있으므로(변경가능) 이 시간이 지나게 되면 클라이언트 연동 기능이 작동을 중지하게 됩니다. 쿠키 만료시 웹 브라우저를 통해 다시 로그인을 해 주어야 하는 번거로움이 있습니다 .

우선 폼 인증시 계정이 어떻게 취급 되는지부터 한번 알아 보도록 하겠습니다. B절의 LDAP 프로바이더 코드에서 userNameAttribute="SAMAccountName" 을 사용하였을 경우 표시 이름은 alias 로 나타나게 됩니다. Active Directory 의 Display Name 이 나오지 않습니다.

img9.jpg

img10.jpg

이 사항은 현재 버그로써 MOSS 의 LDAP 인증 프로바이더가 패치가 되어야 할 사항입니다. 패치 이전에, 커스텀 인증 프로바이더를 직접 제작하는 방법을 검토해볼 수 있습니다. (아직 확인 안됨)

userNameAttribute="cn" 으로 지정할 경우는 아래와 같습니다.

img17.jpg

Display Name 이 나오기는 하지만, 로그인 계정을 Luis Bonifaz 로 해야 합니다. Luis Bonifaz 의 alias 는 luisB 입니다.

img13.jpg

아래를 비교해 보시면 알 수 있습니다. MikeF 는 userNameAttribute="SAMAccountName”, 으로 했을 경우이며(Display Name은 Mike Fitzmaurice) Luis Bonifaz 는 userNameAttribute="cn"으로 프로바이더 코드를 수정하여 로그인 한 것입니다.

img11.jpg

또 한가지 알 수 있는 사실은 중간에 프로바이더 코드를 바꾼다고 해서, 사이트에 이미 들어가 있는 계정의 유형이 바뀌지는 않는다는 사실입니다. 이 부분은 프로파일 동기화를 하지 않은 상태에서 테스트 한 것이기 때문에 조금 더 검증의 여지가 있으나, 근본적인 이유는 위의 두 계정은 사이트의 사용자 데이터 베이스에 이미 추가된 상태로 있기 때문입니다.

또 한가지 기억해야 할 사실은, FBA 계정으로 로그인 하게 되면, LCS 의 상태 정보나, 아웃룩과 연계되는 Exchange 의 일정 정보, 연락처 정보, 프로파일 정보 등이 연동이 될 수 없습니다.

img16.jpg

그럼 여타의 Office 클라이언트들의 연동 기능을 테스트 해 보겠습니다.

우선 폼 인증 설정 항목에서 클라이언트 통합을 사용으로 설정하여야 합니다.

아래 테스트는 도메인 조인 되어 있지 않은 워크그룹 PC (Windows XP) 에서 테스트 하였습니다.

1. Persistent Cookie 를 사용할 경우의 클라이언트 상호 작용

A. 자동으로 로그인 옵션 선택하고 로그인 (Persistent Cookie 의 생성)

B. 문서 라이브러리에서 새 문서 만들기 테스트

인증창 뜨지 않고 바로 넘어감

저장 테스트

역시 인증창 없이 잘 저장됩니다.

C. 탐색기 연동

인증창 없이 탐색기가 웹폴더 형태로 바로 열림.

D. 아웃룩 연동

문서라이브러리의 아웃룩 연결 테스트

인증창 없이 잘 동기화 됨.

E. 인포패스 연동

양식 라이브러리에서 새 인포패스 양식 생성

인증창 없이 잘 뜸.

폼 게시 역시 인증창 없이 잘 됨.

웹 브라우저를 닫고, 인포패스만 띄워서 폼 열기나 양식 라이브러리로 저장해도 인증창 없이 잘 됨.

2. Persistent Cookie 를 사용하지 않을 때의 상호 작용

자동으로 로그인을 체크하지 않거나,

브라우저에서 쿠키를 모두 삭제해 버리면 Persistent Cookie 가 없는 상태의 테스트를 할 수 있음

A. 인포패스 양식 라이브러리에서 새 양식 만들기 테스트

양식을 만들 수 없는 오류 발생. 윈도우 인증이 구성된 상태라면 인증창이 떴을 것임.

B. 문서 라이브러리에서 워드 문서 열기 테스트

열려야 할 문서가 열리지 않고, 로그인 창이 문서로 열리는 오류 발생 합니다. 이것을 처리해 주시려면, 커스텀 HTTP Handler 를 작성하여 FBA 사이트의 인증 프롬프트를 가로채서 기본 인증 프롬프트로 뜨도록 해 주어야 합니다.

C. 탐색기 연동 테스트

탐색기는 웹 폴더 형태로 별다른 문제 없이 열림

D. 아웃룩 연동 테스트

실제 문서는 동기화 되지 않고 빈 채로 나타남

위 테스트 결과로 인터넷 익스플로러가 만들어 주는 것과 동일한 Persistent Cookie 를 생성해 준다면 워크그룹에 속해 있는 PC에서도 인증 창 뜨는 일 없이 대부분의 클라이언트 연동 기능을 활용할 수 있게 된다는 것을 알 수 있습니다.

참고 :

https://technet2.microsoft.com/Office/f/?en-us/library/40117fda-70a0-4e3d-8cd3-0def768da16c1033.mspx

https://technet2.microsoft.com/Office/f/?en-us/library/40117fda-70a0-4e3d-8cd3-0def768da16c1033.mspx

https://blogs.msdn.com/sharepoint/archive/2006/08/16/configuring-multiple-authentication-providers-for-sharepoint-2007.aspx

SUN LDAP 프로바이더 코드 예제 ( by Steve Peschka )

<membership defaultProvider="LdapMembership">

<providers>

<add name="LdapMembership"

type="Microsoft.Office.Server.Security.LDAPMembershipProvider, Microsoft.Office.Server, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71E9BCE111E9429C"

server="pctx-ipl.ctxportals.com" port="21801" useSSL="false" userDNAttribute="entryDN"

userNameAttribute="uid" userContainer="dc=CTXPORTALS,dc=COM"

userObjectClass="Inetorgperson" userFilter="(ObjectClass=Inetorgperson)"

scope="Subtree" otherRequiredUserAttributes="sn,givenname,cn" />

</providers>

</membership>

<roleManager defaultProvider="LdapRole" enabled="true" cacheRolesInCookie="true" cookieName=".PeopleDCRole">

<providers>

<add

name="LdapRole"

type="Microsoft.Office.Server.Security.LDAPRoleProvider, Microsoft.Office.Server, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71E9BCE111E9429C"

server="pctx-ipl.ctxportals.com"

port="21801"

useSSL="false"

groupContainer="dc=CTXPORTALS,dc=COM"

groupNameAttribute="cn"

groupMemberAttribute="uniqueMember"

userNameAttribute="uid"

dnAttribute="entryDN"

groupFilter="(ObjectClass=groupofuniquenames)"

scope="Subtree"

/>

</providers>

</roleManager>