我们想要一块代码,我们可以在后面的代码中粘贴,并获取代码运行的用户名: - (通常在应用程序池的帐户下运行)

  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授权\ 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

    更新

    (在我们的情况下,站点coll。管理员用户名与Web应用程序AppPool用户名相同,所以它真的是哪个帐户?)

    1)我们可以得出结论,代码运行的凭据是'nt授权\ iusr',如果我们使用RWEP,则用户是'webapp / sitecol adminumer acount'?例如,假设我们正在服务器上访问文件,然后,上述2个帐户将用于访问该文件,而不是登录用户的帐户。

    2)访问SharePoint资源时使用哪个帐户?是上面的2个还是登录用户凭据之一?

有帮助吗?

解决方案

notvonkaiser在这种情况下是正确的:

1在农场帐户下运行,所有其他人都在用户帐户登录!

登录的用户帐户将调用Ser服务器上的NT /经过身份验证的帐户,即他/她在服务器上有身份验证,他要求TODO!如果这是有道理的;)

识别NT /验证,好像您在物理上登录到服务器TODO时,当您将机器电源到Logonto Windows时,您将在您的桌面PC上的特定任务!

所以要明确:

2-6在具有NT身份验证的用户帐户中运行的当前运行(允许访问所需的任何资源)

现在这样说,还有另一个涉及的因素,它与您的Web.config和CAS策略(代码访问安全策略)有关,具体取决于您的设置(完整,部分,低) 将确定访问您在当前登录的资源中的访问权限!

在部署方面,全方位信任之间的唯一差异 执行模型和Bin / CAS执行模型是位置 您部署您的装配块和代码访问安全策略 与该位置有关。在这两种情况下,任何非编译项目, 如ASP.NET标记文件,XML文件或资源文件 通常部署到每个Web前端的SharePoint root 服务器。如果要使用其中任何一个农场部署农场解决方案 解决方案执行模型,您必须可以访问服务器文件 系统并成为Farm Administrators安全组的成员。

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

大多数代码是在用户帐户登录的当前执行的....除非您用户重新运行,除非是其他方式!

现在我相信的问题是更复杂和更深入的事情,我相信你的寻找它有什么与工人流程的努力!

所以您登录到机器 - >转到SharePoint站点,用于验证您的帐户(NT身份验证) - >比执行工作过程W3WP.exe下运行的作业,我认为这是您的推荐吗?

工作进程是用户模式代码,其角色是处理请求, 如处理请求返回静态页面,调用ISAPI 扩展或过滤器,或运行公共网关接口(CGI) 处理程序。 在两个应用程序隔离模式中,控制工人流程 由www服务。但是,在工人流程隔离模式下,a 工作进程作为一个名为w3wp.exe的可执行文件,在IIS中运行 5.0隔离模式,工人流程由InetInfo.exe托管。图2.2描绘了IIS 5.0隔离模式的架构,使用虚线来建议工人进程之间的关系 www服务。

工作进程使用http.sys接收请求并发送 使用HTTP的响应。工人进程也运行应用程序代码, 如ASP.NET应用程序和XML Web服务。您可以配置 IIS运行多个工作进程,可提供不同的应用程序 池同时。该设计通过过程分离应用 界限并有助于实现最大的Web服务器可靠性。

默认情况下,工作过程中的工作进程孤立模式运行 在网络服务帐户下,其安全最强 (最少访问)与所需的功能兼容。

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

所以IIS工人进程将是在底部执行代码的IIS,但是在第一个地方执行此操作,您需要进行NT经过身份验证的无谬误!

以下链接显示更好的理解!

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

编辑

1)我们可以得出结论,代码运行的凭据是 'nt权限\ iusr',如果我们使用RWEP,那么用户是 'webapp / sitecol admin用户acount'?例如假设我们是 访问服务器上的文件然后,将使用上述2个帐户 要访问该文件而不是登录用户的帐户。

好吧我认为你的困惑?

此阶段....用户登录机器是?该用户可以访问,是'NT权限\ iusr'的一部分,因此他能够访问在SharePoint中的特定资源,要求您在SharePoint中成为“NT权限\ IUSR”.....现在在服务器后端运行代码W

生病了在w3wp.exe中(如.cs代码(在装配范围内))......这是在应用程序池帐户下运行。但这不会运行,除非登录用户是'nt授权\ iusr'的一部分。它不是一个或另一个,更像是同时使用的。

您知道登录的帐户是您使用的智慧;)但是要知道W3WP.exe您需要转到服务器和GOTO TAST管理器,请查看进程并找到W3WP.exe ...您应该看到下一个列与它名称为Web应用程序池帐户。

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
.

请注意,如果您有“runWithElevatePriveIleges”委托块,则不会正确地工作。相反,如果您在委托块中调用它,您只需获取运行代码的帐户的名称。如果您需要在这种情况下提供用户名,请在运行委托块之前或之后调用'spcontext'对象。您将无法直接将对象转移到委托块中,但您应该应该能够提取您需要的字符串或您和发送它们的内容。

对于CSOM,假设您使用JavaScript,此代码块来自这个 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();
}
.

您必须在此脚本运行之前预加载sp.js,无论是通过将其粘在母版页中还是添加'sharepoint:scriptlink'块,可以在标记中延伸。

基本上,你要做的就是这样:

  1. 调用客户端上下文。
  2. 告诉客户端上下文您要从它中取出的内容。
  3. 对Web服务进行异步调用以获取该信息。
  4. 如果异步调用成功,请设置回调方法以处理数据。

    希望有帮助!

许可以下: CC-BY-SA归因
scroll top