如何检查代码运行的用户名/ accountName?
-
10-12-2019 - |
题
我们想要一块代码,我们可以在后面的代码中粘贴,并获取代码运行的用户名: - (通常在应用程序池的帐户下运行)
-
定时器作业。
-
事件接收器。
-
webpart。
-
布局申请页面。
-
用户控制
-
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策略(代码访问安全策略)有关,具体取决于您的设置(完整,部分,低) 将确定访问您在当前登录的资源中的访问权限!
生病了在w3wp.exe中(如.cs代码(在装配范围内))......这是在应用程序池帐户下运行。但这不会运行,除非登录用户是'nt授权\ iusr'的一部分。它不是一个或另一个,更像是同时使用的。在部署方面,全方位信任之间的唯一差异 执行模型和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服务器可靠性。
默认情况下,工作过程中的工作进程孤立模式运行 在网络服务帐户下,其安全最强 (最少访问)与所需的功能兼容。
所以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您需要转到服务器和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'块,可以在标记中延伸。
基本上,你要做的就是这样:
- 调用客户端上下文。
- 告诉客户端上下文您要从它中取出的内容。
- 对Web服务进行异步调用以获取该信息。
- 如果异步调用成功,请设置回调方法以处理数据。
希望有帮助!