문제

우리는 코드를 뒤에 붙여 넣을 수있는 코드 조각을 원하며 코드가 실행되는 사용자 이름을 얻을 수 있습니다. - (일반적으로 응용 프로그램 풀 계정에서 실행되는 것으로 실행됩니다)

  1. 타이머 작업.

  2. 이벤트 수신기.

  3. WebPart.

  4. 레이아웃 응용 프로그램 페이지.

  5. 사용자 제어

  6. jsom

    그런 다음 RWEP을 사용하고 다시 실행중인 사용자 이름 코드가 다시 실행되도록합니다.

    우리는 어떤 스 니펫을 사용합니까?

    업데이트

    사용자가 로그인 한 사용자 이름을 제공하는 코드를 원하지 않습니다. 코드가 실행될 계정 이름을 알려주는 코드를 원합니다.

    업데이트

    응용 프로그램 페이지 :

      SPUser user1 = SPContext.Current.Web.CurrentUser;
            string userName1 = user1.Name;
    
    .

    는 값을 다음과 같이 제공합니다. 로그인 한 사용자 이름입니다.

     SPSecurity.RunWithElevatedPrivileges(delegate()
            {
                using (SPSite site = new SPSite(idd))
                {
                    using (SPWeb rootWeb = site.OpenWeb())
                    {
                        SPUser user2 = SPContext.Current.Web.CurrentUser;
                        string userName2 = user2.Name;
                    }
    
                }
            });
    
    .

    는 다음과 같이 값을 제공합니다 : 로그인 한 사용자 이름.

     var User = System.Security.Principal.WindowsIdentity.GetCurrent().User;
            var UserName = User.Translate(typeof(System.Security.Principal.NTAccount)).Value;
    
    .

    는 NT Authority \ IUSR 로 값을 부여합니다.

      SPSecurity.RunWithElevatedPrivileges(delegate()
            {
                using (SPSite site = new SPSite(idd))
                {
                    using (SPWeb rootWeb = site.OpenWeb())
                    {
                        var User12 = System.Security.Principal.WindowsIdentity.GetCurrent().User;
                        var UserName12 = User12.Translate(typeof(System.Security.Principal.NTAccount)).Value;                        
                    }
    
                }
            });
    
    .

    은 값을 제공합니다. servername \ spadminaccountname

    업데이트

    (우리의 경우, 사이트 동작. admin 사용자 이름은 웹 응용 프로그램 apppool 사용자 이름과 동일합니다. 그래서 어떤 계정이 실제로 계정입니까?)

    1) 코드가 실행되는 자격 증명이 'NT Authority \ IUSR'이고 RWEP을 사용하는 경우 사용자는 'WebApp / Sitecol Admin 사용자 Acount'인 것으로 결론을 내릴 수 있습니까? 예를 들어, 서버에서 파일에 액세스하는 경우 위의 2 개의 계정은 파일에 액세스하는 데 사용되며 사용자가 로그인 한 사용자가 아닌 파일에 액세스하는 데 사용됩니다.

    2) SharePoint 자원에 액세스 할 때 어떤 계정이 사용됩니까? 위의 2 중 하나 또는 로그인 한 사용자 자격 증명 중 하나입니까?

도움이 되었습니까?

해결책

notvonkaiser이 경우 정확합니다 :

1은 팜 계좌에서 실행되며 모든 다른 모든 사람들이 사용자 계정에 로그인했습니다!

로그인 한 사용자 계정은 서버에서 서버에서 인증이있는 서버에서 NT / 인증 계정을 호출합니다. 그것이 의미가있는 경우;)

NT / Authenticated를 서버 Todo에 물리적으로 로그온하는 것처럼 Desktop PC에있는 것처럼 특정 작업을 로그온 할 때 마찬가지로 Windows로 Logonto Windows로 이동하십시오!

이렇게하기 위해서 :

2-6 NT 인증이있는 사용자 계정에 로그인 한 현재 로그인 (모든 자원에 액세스 할 수 있음)

이제는 이렇게 말하고 다른 요소가 있고 Web.config 및 CAS 정책 (코드 액세스 보안 정책)과의 todo가 있으며, 설정 한 것에 따라 (전체, 부분, 낮음) 로그인 한 계정에있는 현재로 자원에 필요한 액세스를 결정합니다!

배포 측면에서 전체 신뢰 간의 유일한 차이점 실행 모델과 BIN / CAS 실행 모델은 위치입니다. 어셈블리와 코드 액세스 보안 정책을 배포합니다. 그 위치와 관련이 있습니다. 두 경우 모두 컴파일되지 않은 항목, ASP.NET 마크 업 파일, XML 파일 또는 리소스 파일과 같은 경우 일반적으로 각 웹 프런트 엔드의 SharePoint 루트에 배포 섬기는 사람. 팜 중 하나를 사용하여 팜 솔루션을 배포하려는 경우 솔루션 실행 모델, 서버 파일에 액세스 할 수 있어야합니다. 시스템 및 팜 관리자 보안 그룹의 구성원이됩니다.

http://msdn.microsoft.com/en-us/library/ FF798412.aspx

대부분의 코드는 사용자 계정에 로그인 한 현재로 실행됩니다 .... 사용자가 reunwitheLevatedPrivages가 다른 것보다 efuntheevatedPrivlages를 사용하지 않는 한!

이제 내가 믿는 질문에 더 복잡하고 더 깊은 곳은 노동자 과정을 가진 당신의 모습이 무엇인지 믿는 것입니다!

기기에 로그인 -> NT 인증 (NT 인증) -> 작업을 수행하는 작업을 수행하는 작업을 수행하는 것보다 W3wp.exe로 실행하는 작업을 수행하고 다음과 같이 알려줍니다.

작업자 프로세스는 역할이 요청을 처리하는 것 인 사용자 모드 코드입니다. 정적 페이지를 반환하는 처리 요청, ISAPI 호출 확장 또는 필터 또는 공통 게이트웨이 인터페이스 실행 (CGI) 핸들러.

모두 응용 프로그램 격리 모드에서 작업자 프로세스가 제어됩니다. www 서비스에 의해. 그러나 작업자 프로세스 격리 모드에서 A. 작업자 프로세스는 w3wp.exe라는 실행 파일로 실행되며 IIS에서 실행됩니다. 5.0 격리 모드에서는 Worker 프로세스가 inetinfo.exe에 의해 호스팅됩니다. 그림 2.2는 IIS 5.0 격리 모드의 아키텍처를 묘사하고, 점선을 사용하여 작업자 프로세스 간의 관계를 제안합니다. WWW 서비스.

작업자 프로세스는 HTTP.sys를 사용하여 요청을 수신하고 보낼 수 있습니다. HTTP를 사용하여 응답. 작업자 프로세스도 응용 프로그램 코드를 실행합니다. ASP.NET 응용 프로그램 및 XML 웹 서비스와 같은 구성 할 수 있습니다 IIS는 여러 응용 프로그램을 제공하는 여러 작업자 프로세스를 실행합니다. 수영장 동시에. 이 디자인은 응용 프로그램을 프로세스별로 구분합니다 경계와 최대 웹 서버 안정성을 달성하는 데 도움이됩니다.

기본적으로 작업자 프로세스 격리 모드 실행 작업 프로세스 가장 강한 보안을 가진 네트워크 서비스 계정에서 (최소 액세스) 필요한 기능과 호환됩니다.

. http://www.microsoft.com/technet/prodtechnol/windowsserver2003/library/iis/29f53968-0115-451f-b26d-5ad58d87b5d1.mspx?mfr=true

그래서 IIS 작업자 프로세스는 바닥에서 코드를 실행하는 코드가 될 것이지만 처음에는 이렇게하려면 NT 인증을 사용해야합니다.

다음 링크는 더 나은 이해를 보여줍니다!

http://msdn.microsoft.com/en-us/library/ ff798428.aspx

편집

1) 코드가 실행되는 자격 증명이 'NT Authority \ IUSR'및 RWEP를 사용하면 사용자가 'WebApp / SiteCol Admin User Acount'? 예를 들면 우리가 가정 해보십시오 서버에서 파일에 액세스하면 위의 2 계정이 사용됩니다. 파일에 로그인 한 사용자가 아닌 파일에 액세스하려면

OK 나는 당신의 혼란스러워한다고 생각합니까?

이 두 가지 단계가 있습니다 .... 사용자가 컴퓨터에 로그에 로그인합니까? 그 사용자가 액세스 할 수 있으며 'NT Authority \ IUSR'의 일부이므로 SharePoint 내에서 'NT Authority \ IUSR'이 필요하는 특정 리소스에 액세스 할 수 있습니다. 이제는 서버의 백엔드에서 코드를 실행합니다 W

w3wp.exe (예 : .cs 코드 (예 : 어셈블리)) ... 이것은 응용 프로그램 풀 계정에서 실행됩니다.하지만 로그인 한 사용자가 'NT Authority \ IUSR'의 일부인 경우가 아니면 실행됩니다.그것의 하나가 아니라 다른 것, 동시에 둘 다 사용되는 것과 같습니다.

로그인 한 계정이 ObviousLT를 사용하는 것으로 알고 있지만 W3wp.exe를 알아야 할 서버와 TAST 관리자를 찾아야하며 프로세스를보고 W3WP.exe를 찾아야합니다 ... 다음 열을 볼 수 있습니다.웹 응용 프로그램 풀 계정이 될 사용자 이름을 사용하십시오.

2) SharePoint 자원에 액세스 할 때 어떤 계정이 사용됩니까?그거야 위의 2 중 하나 또는 로그인 된 사용자 자격 증명 중 하나?

SharePoint 자원은 로그인 한 사용자가 액세스합니다.위와 같습니다.

다른 팁

1은 항상 팜 계좌에서 실행되어야합니다.

2, 3, 4 및 5의 경우이 코드를 사용 하여이 정보를 송신 할 수 있어야합니다.

SPUser user = SPContext.Current.Web.CurrentUser;
string userName = user.Name; //you can also call user.Email here
.

runwithelevatedPrivileges 'relight 블록이있는 경우 이 아니라 이 올바르게 작동합니다. 오히려, 대리인 블록 내에서 전화를 걸면 코드를 실행하는 계정의 이름을 얻을 수 있습니다. 이 경우 사용자 이름을 제공 해야하는 경우 대리자 블록을 실행하기 전 또는 후에 'spContext'객체를 호출하십시오. 대리인 블록에 객체를 직접 전달할 수는 없지만 은 문자열에 필요한 것을 추출하거나 을 보낼 수있는 을 추출 할 수 있어야합니다.

CSOM의 경우이 코드 블록은 ms 페이지 :

function getUserProperties() {

// Replace the placeholder value with the target user's credentials.
var targetUser = "domainName\\userName";

// Get the current client context and PeopleManager instance.
var clientContext = new SP.ClientContext.get_current();
var peopleManager = new SP.UserProfiles.PeopleManager(clientContext);

// Get user properties for the target user.
// To get the PersonProperties object for the current user, use the
// getMyProperties method.
personProperties = peopleManager.getPropertiesFor(targetUser);

// Load the PersonProperties object and send the request.
clientContext.load(personProperties);
clientContext.executeQueryAsync(onRequestSuccess, onRequestFail);
}

// This function runs if the executeQueryAsync call succeeds.
function onRequestSuccess() {

// Get a property directly from the PersonProperties object.
var messageText = " \"DisplayName\" property is "
    + personProperties.get_displayName();

// Get a property from the UserProfileProperties property.
messageText += "<br />\"Department\" property is "
    + personProperties.get_userProfileProperties()['Department'];
$get("results").innerHTML = messageText;
}

// This function runs if the executeQueryAsync call fails.
function onRequestFail(sender, args) {
$get("results").innerHTML = "Error: " + args.get_message();
}
.

이 스크립트가 마스터 페이지에 끼워 지거나 마크 업에서 'SharePoint : ScriptLink'블록을 추가하여이 스크립트가 실행되기 전에 sp.js가 미리로드되어야합니다.

기본적으로, 당신이해야 할 일은 다음과 같습니다.

  1. 클라이언트 컨텍스트를 호출합니다.
  2. 클라이언트 컨텍스트에서 검색 할 내용을 알려줍니다.
  3. 웹 서비스에 대한 비동기식 호출을 수행하여 해당 정보를 얻습니다.
  4. 비동기 호출이 성공했거나 아닌 경우 데이터를 처리하는 콜백 메소드를 설정합니다.

    도움이되기를 바랍니다!

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 sharepoint.stackexchange
scroll top