Asp.net SharePoint 2007远程文件访问被拒绝CAS
我在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是否仍在阻止远程访问?有人能想到其他需要回顾的领域吗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之外的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是否解决了问题。