6

그래,이 문제를 해결하는 데 약 15 시간을 보냈으며 마침내 해결하기 위해 여기에 게시하도록 사임했습니다. 나는이 지위가 매우 길다는 것을 알고 있지만 나는 모든 정상적인 일들을 해본 결과 내가 그렇게하려고 노력할 것임을 분명히하고 싶다. 그래서 우리는 그 일에 시간을 낭비하지 않는다.SharePoint 2013/IIS 7.5 가장/위임/이중 홉

ESXi 5.0 서버에서 호스팅되는 Windows Server 2008 R2 가상 컴퓨터가 있습니다. 이 서버에는 SharePoint Foundation 2013 Preview와 모든 pre-requsites 등이 설치되어 있습니다.이 한 대의 서버 (MSSQL, IIS 7.5, SharePoint 서비스)에서 모든 것을 실행하고 있으며 제한된 사용 권한을 갖고 있으며 약 30 명의 사용자 만 사용할 수 있습니다. SharePoint에 추가해야하는 한 가지 사실은 AD가 거의 채워지지 않고 구식이기 때문에 사용자가 Active Directory (Server 2003)에서 정보를 수정할 수있는 능력입니다. 완전한 WebPart를 발견했으며 사용자 편집에 이상적입니다.

사용자가 WebPart를 직접 편집 할 수 있도록 구성하려는 경우 문제가 발생합니다. WebPart는 (제대로) C# .NET에서이 코드 줄을 사용합니다. IIS에서 Windows 인증으로 인증 된 현재 로그인 된 Identity를 가져옵니다. 그러나 대신 로컬 사용자 NT AUTHORITY/IUSR이 반환됩니다. (나는 이것이 누구에게도 뉴스가 아님을 안다.)

System.Security.Principal.WindowsIdentity.GetCurrent().Name;

그래서 나는 내 연구를 시작하고 다음 중 확인했다. SharePoint 용 내 Web.config의에서

, 나는 다음과 같은 한 : IIS에서

<authentication mode="Windows" /> <identity impersonate="true" />

, 내가 가지고있는 IIS 웹 사이트에 대해 다음 인증 설정하는 내 SharePoint 설치 내역 :

Anonymous Authentication Disabled 
ASP.NET Impersonation  Enabled 
Basic Authentication  Disabled HTTP 401 Challenge 
Digest Authentication  Disabled HTTP 401 Challenge 
Forms Authentication  Disabled HTTP 302 Login/Redirect 
Windows Authentication  Enabled  HTTP 401 Challenge 

익명 인증을 사용하지 않아도 사이트가 익명 사용자로 로그인하고 있다는 것을 알고 있습니다. 내 문제와 일치하는 이중 홉 문제에 대한 정보를 발견했으며이 링크를 통해이 게시물의 모든 지시 사항을 따랐습니다. http://blogs.technet.com/b/taraj/archive/2009/01/29/checklist-for-double-hop-issues-iis-and-sql-server.aspx. 각 단계마다 응용 프로그램의 동작이 변경되었는지 확인했지만 절대로 발견하지 못했습니다.

  1. 나는 응용 프로그램 풀을 실행하는 도메인 사용자 계정을 설정 :

    요약에서 나는 다음과 같은했다. 테스트를 위해이 사용자를 Domain Admins 그룹의 구성원으로 만들었습니다.

  2. web.config의 행을 <add key="aspnet:AllowAnonymousImpersonation" value="false" />으로 변경했습니다 (사실). 이로 인해 NT AUTHORITY \ IUSR 사용자가 응용 프로그램을 실행할 수 없으며 대신 응용 프로그램 풀을 실행하기 위해 만든 도메인 계정으로 실행됩니다. 이제 SharePoint에 로그인하고 WebPart에 액세스 할 수 있지만 예상대로 인증 된 도메인 사용자가 아닌 응용 프로그램 풀을 실행하는 도메인 사용자의 AD 정보가 표시됩니다. 그래서 WebPart가 작동하고 필요한 권한을 가지고 있다는 것을 알고 있지만 System.Security.Principal.WindowsIdentity.GetCurrent().Name;은 여전히 ​​앱 풀을 실행중인 사용자를 반환합니다.가장이 여전히 작동하지 않습니다.
  3. AD 사용자 및 컴퓨터에서이 모두가 실행되는 가상 서버에 대해 Trust this computer for delegation to any service을 부여했습니다.
  4. 응용 프로그램 풀을 실행하는 도메인 사용자 계정에 대한 "위임"탭이 없으므로 사용자에 대해 SPN을 등록해야했습니다. 서버의 SPN 목록에서 복사 한 모든 SPN과 온라인에서 찾은 두 개의 HTTP SPN을 등록한 후 사용자에게 Trust this user for delegation to any service을 설정하면 응용 프로그램의 동작이 변경되지 않았습니다.
  5. 내가 로그인 한 도메인 사용자가 위임으로부터 보호되지 않았 음을 확인했습니다.
  6. SharePoint 서버의 로컬 정책 편집기에 들어가서 응용 프로그램 풀을 실행하는 도메인 사용자가 " 운영 체제의 일부 "및"인증 후 클라이언트로 가장합니다 "를 참조하십시오.
  7. 다른 일들이 내가
    • 는 IIS 웹 사이트의 Windows 인증에 대한 인증 공급자로 Negotiate:Kerberos 추가 을 시도
    • 셰어의 web.config에서이 두 줄의
    • 확정 존재 :

DC에있는 내 SPN 레코드는 다음과 같습니다.

setspn -l SPserver 
Registered ServicePrincipalNames for CN=SPserver,CN=Computers,DC=DOMAIN,DC=local: 
    MSSQLSvc/SPserver.DOMAIN.local:appPoolUser 
    WSMAN/SPserver 
    WSMAN/SPserver.DOMAIN.local 
    TERMSRV/SPserver 
    TERMSRV/SPserver.DOMAIN.local 
    RestrictedKrbHost/SPserver 
    HOST/SPserver 
    RestrictedKrbHost/SPserver.DOMAIN.local 
    HOST/SPserver.DOMAIN.local 



setspn -l appPoolUser 
Registered ServicePrincipalNames for CN=appPoolUser,OU=Utility,OU=Users,OU=Company Name,DC=DOMAIN,DC=local: 
    http/subdomain.domain.com 
    http/SPserver.DOMAIN.local 
    RestrictedKrbHost/appPoolUser.DOMAIN.local 
    RestrictedKrbHost/appPoolUser 
    MSSQLSvc/appPoolUser.DOMAIN.local:appPoolUser 
    HOST/appPoolUser 
    HOST/appPoolUser.DOMAIN.local 

이 과정에서 서버와 IIS를 여러 번 다시 시작했습니다. 로그인 한 후에도 내 웹 파트가 나를 응용 프로그램 풀을 실행하는 사용자로 식별합니다. 클래식 모드 응용 프로그램 풀을 사용하는 것과 같은 해결 방법이 있다는 것을 알고 있지만 사용되지 않습니다. .NET에서 올바른 이름을 얻는 다른 방법이 있지만 웹 파트를 변경해야하는 것은 아니지만 더 중요한 것은 올바른 방법이며 작업을 수행 할 수 있어야합니다. 나는 그 문제를 계속해서 해결하고 싶지 않다.

누군가가 문제를 일으킬 수있는 아이디어가 있다면 그 질문을 듣고 싶습니다.

+0

이 게시물을 업데이트하고 싶습니다. 나는 아직 해결책을 찾지 못했고 아무 것도 다른 누군가를 위해 울려 퍼진 것처럼 보이지 않는다. 그 동안 웹 파트의 코드를 변경하여 다음과 같이 사용자를 얻습니다. 'SPSite site = new SPSite (SPContext.Current.Web.Url.ToString()); ' 'SPWeb web = site .OpenWeb ("/");' 'SPUser user = web.CurrentUser;' – user456151

답변