Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net SharePoint 2007远程文件访问被拒绝CAS_Asp.net_Security_Sharepoint_Moss_Code Access Security - Fatal编程技术网

Asp.net SharePoint 2007远程文件访问被拒绝CAS

Asp.net SharePoint 2007远程文件访问被拒绝CAS,asp.net,security,sharepoint,moss,code-access-security,Asp.net,Security,Sharepoint,Moss,Code Access Security,我在SharePoint 2007的页面布局内的ascx中运行代码,该代码访问远程服务器上的文件,即File.Create(“\servername\sharename\folder\File.txt”)。该代码在web.config中将CAS信任设置为Full的SharePoint web应用程序中运行。File.Create引发以下异常:- System.UnauthorizedAccessException异常 对路径“\\servername\sharename\folder\file.

我在SharePoint 2007的页面布局内的ascx中运行代码,该代码访问远程服务器上的文件,即File.Create(“\servername\sharename\folder\File.txt”)。该代码在web.config中将CAS信任设置为Full的SharePoint web应用程序中运行。File.Create引发以下异常:-

System.UnauthorizedAccessException异常

对路径“\\servername\sharename\folder\file.txt”的访问被拒绝

共享共享给具有完全控制权的所有人,NTFS权限设置为具有完全控制权的所有人。web应用程序应用程序池在域帐户下运行,该帐户也具有访问该资源的显式权限(不需要)

我在远程机器上运行了Process Monitor,服务器上没有记录任何点击。这使我相信这是SharePoint代码访问安全设置的问题。正如我上面所说的,web.config中的信任设置为Full

CAS是否仍在阻止远程访问?有人能想到其他需要回顾的领域吗


更新

更多信息

我已尝试使应用程序池帐户域管理员,但问题仍然存在。当使用相同的方法访问本地机器上的驱动器时,它工作正常。使用应用程序池帐户在sharepoint之外的SnippetCompiler中运行相同的代码可以正常工作

希望这有帮助,让我知道如果你能想出更多的调查或测试的途径,我可以尝试


更新

我不确定这是否会影响问题,但本地服务器运行的是Windows server 2003,远程服务器运行的是Windows 2000


更新

我刚刚尝试通过web部件运行代码,效果很好。我在失败的项目中使用的文件结构如下:-

wss
 - VirtualDirectories
   - SharePointWebApp
     - ...sp web app files
     - .
     - .
   - PageLayoutControls
     - control.ascx
     - .
     - .
在IIS中,我有以下结构:-

IIS
 - Websites
   - SharePointWebApp (pointing to \wss\VirtualDirectories\SharePointWebApp)
     - PageLayoutControls (virtual directory pointing to \wss\VirtualDirectories\PageLayoutControls)
然后在页面布局中,我使用以下方法引用控件:-

<%@ Register TagPrefix="TEST" TagName="MyControl" Src="~/PageLayoutControls/control.ascx" %>
<asp:Content ContentPlaceholderID="PlaceHolderMain" runat="server">
  <TEST:MyControl id="myControl" runat="server"/>
</asp:Content>Let me know if you need more info.

如果你需要更多信息,请告诉我。

更新

谜团加深了

当我从sharepoint web前端服务器上的Internet Explorer(6或7)访问sharepoint网站时,我没有收到异常

当我从SP web前端服务器从Mozilla Firefox访问sharepoint站点时,我确实遇到了异常

当我从任何浏览器远程访问sharepoint网站时,都会出现异常

此外,只要我使用的用户具有访问sharepoint网站的权限,我就可以使用什么用户登录该网站

有什么想法吗


更新

嗯,我现在发现,如果我远程访问sharepoint站点,sharepoint站点尝试在本地执行File.Create()(即File.Create(“C:\temp\abc.txt”)),那么它就会工作。如果我从sharepoint框访问sharepoint网站,并远程执行File.Create()(即File.Create(“\ServerName\ShareName\FolderName\File.txt”)),则它可以工作

只有当我远程访问sharepoint网站并让sharepoint网站尝试远程执行File.Create()时,它才会失败。有点像双跳问题。这使我认为这可能是一个NTLM/Kerberos问题

目前,我们正在使用NTLM身份验证运行

还有其他人经历过这种问题吗


更新

是的,我很确定这是一个NTLM问题,不允许双跳。我刚刚将sharepoint网站上的身份验证更改为使用基本身份验证,并且其已生效。将其更改回集成身份验证,但失败

现在决定是将服务器场移动到使用Kerberos还是找到解决此问题的其他方法:-/


更新

现在给SPSecurity.RunWithElevatedPrivileges一次机会。不过有一件事,RunWithElevatedPrivileges是否打算在这个上下文中使用?以前,我只使用它访问SharePoint中的列表和库,而不是通过网络访问文件

有什么想法吗


更新


是的,SPSecurity.RunWithElevatedPrivileges解决了这个问题。:-)

我想知道这是否是双跳问题,并且您的代码正在尝试以模拟用户的身份访问资源,但是失败了,因为NTLM不会模拟到另一台服务器(Kerberos会)

您是否使用提升权限尝试过SPSecurity.run?这将删除模拟(restortoself),然后应用程序池所有者可能就可以扮演自己(她自己?),而以前可能不能


这只是一个想法,应该很容易尝试。

我想知道这是否是双跳问题,您的代码是否正在尝试以模拟用户的身份访问资源,但是失败了,因为NTLM不会模拟到另一台服务器(Kerberos会)

您是否使用提升权限尝试过SPSecurity.run?这将删除模拟(restortoself),然后应用程序池所有者可能就可以扮演自己(她自己?),而以前可能不能


只是一个想法,应该很容易尝试。

为建议干杯Kirk,我会尝试一下,让您知道SPSecurity.RunWithElevatedPrivileges是否解决了问题。为建议干杯Kirk,我会尝试一下,让您知道SPSecurity.RunWithElevatedPrivileges是否解决了问题。