Asp.net mvc应用程序部署/安全问题

时间:2010-06-11 07:07:17

标签: asp.net-mvc deployment visual-studio-2010 iis-7 iis-7.5

我将从appologies开始;我不确定这是否最好贴在这里的服务器故障,所以如果它在错误的地方,请移动: - )

基本信息

我已经编写了新应用程序的第一个模块。这是使用Visual Studio 2010编写的,目标是.net 3.5(目前)和asp.net mvc 2.这在从VS内置的开发服务器上运行的开发过程中工作正常但是一旦部署到IIS 7就无法工作/7.5。

要部署应用程序,我已经在发布模式下构建了它,并通过右键单击解决方案资源管理器中的项目创建了一个部署包(这将通过从测试版升级后的tfs中的自动构建完成)。然后将其导入服务器上的IIS。

该应用程序正在使用Windows /域身份验证。

问题#1

我可以启动Internet Explorer并从客户端计算机以及远程桌面连接浏览到该应用程序。我可以从远程桌面上的IE实例执行从Session中读取/存储数据的代码,但是如果我从客户端PC浏览它,它似乎会丢失会话状态。我点击表单提交,页面刷新,不执行所需的代码。我试过用; InProc,SQLServer和StateServer。但没有运气: - (

问题#2

作为应用程序的一部分,它可以即时查看办公室网络上网络共享上的PDF和Tiff文档,并在以前未查看过文档时创建缩略图。如果在部署应用程序的计算机上运行,​​则此方法有效;但是,当从客户端PC浏览时,我收到错误消息:

  

拒绝访问路径'\\ fileserver \ folder \ file.tif'   描述:执行当前Web请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

     

异常详细信息:System.UnauthorizedAccessException:拒绝访问路径'\\ fileserver \ folder \ file.TIF'。

     

ASP.NET无权访问所请求的资源。考虑将资源的访问权限授予ASP.NET请求标识。 ASP.NET具有基本进程标识(通常是IIS 5上的{MACHINE} \ ASPNET或IIS 6上的网络服务),如果应用程序未模拟,则使用该标识。如果应用程序模拟通过,则标识将是匿名用户(通常为IUSR_MACHINENAME)或经过身份验证的请求用户。

由于这是在另一台服务器上,因此无法访问该用户。为了解决这个问题,我尝试过:

1 - 将应用程序池设置为以域管理员身份运行(我知道这是一个安全风险,但我现在只是想让它工作!)

2 - 将World Wide Web Publishing服务的登录帐户设置为域管理员。当我尝试重启服务时,我得到了......

  

Windows无法在本地计算机上启动World Wide Web Publishing服务。

     

错误1079:为此服务指定的帐户与在同一流程中运行的其他服务指定的帐户不同。

任何指针/帮助都会受到很大的影响,因为我正在把头发拉出来(我剩下的很少)。


更新

我一直在使用我找到的这个时髦的小工具 - DelegConfig v2 beta (Delegation / Kerberos Configuration Tool)。这非常有用。所以我已经访问了文件共享工作(有一个测试页面可以读取文件)所以现在我遇到了将用户凭据传递到SQL Server的问题(不是我选择的)这样做!!)执行查询等但我不能让它以用户身份登录。它试图以“NT Authority \ Network Service”访问它,它没有sql登录(应该是登录用户)。

我的连接字符串是:

<add name="User" connectionString="Data Source=.;Integrated Security=True" providerName="System.Data.SqlClient" />

没有指定初始目录,因为系统超过了多个dbs(也不是我的选择!!)。

到目前为止,我真的很喜欢所有的帮助! : - )

还有什么提示吗?!

3 个答案:

答案 0 :(得分:1)

问题#2 - 您的选择是:

  • 配置委派(双跃点认证) - 我在IIS7上没有这样做,它与6有点不同,但我相信您需要在AD中启用Web服务器计算机帐户,并创建SPN对于Web服务器(例如setspn -A http/<Web Server FQDN> <Domain>\<Machine Name>)。对Kerberos进行故障排除可能会非常痛苦。
  • 授予对(域)应用程序池帐户的网络资源的访问权限,并确保打开匿名身份验证(<anonymousAuthentication enabled="true" userName="" defaultLogonDomain="" />

对更新的回应:

您需要确保Kerberos身份验证适用于SQL Server。运行查询select auth_scheme from sys.dm_exec_connections where session_id=@@spid;它将返回NTLM或KERBEROS。如果是NTLM,则需要进行一些配置SQL Server以使用Kerberos的工作。在AD中为SQL服务帐户设置SPN:setspn -A MSSQLSvc/<SQL Server FQDN>:1433 <Domain>\<Sql Service Account>,重新启动SQL Server并再次尝试查询。您必须使用TCP / IP作为连接机制(这是默认设置)。

如果您没有初始目录,则需要确保所有用户登录都具有他们有权访问的默认数据库。我个人会选择一个数据库作为初始目录,因为根据登录的配置方式,您可能会得到不同的行为。

答案 1 :(得分:0)

有了这一小部分信息,我只能给出一些提示:

问题#1: 也许你有一个误导性的URL作为表单的动作?或者被抓住和被忽略的例外?你的global.asax.vb中有onError事件吗?

Sub Application_Error()
    Dim ex As Exception = Server.GetLastError
    ' NOW HANDLE THE EXCEPTION --> REPORTING :-)
End Sub

问题#2: 我最近有同样的例外 - 我必须检查该文件夹的用户的访问权限,并将appPool-identity设置为“NETWORKSERVICE”。在您的情况下,您甚至尝试访问网络文件夹 - 检查服务器上的访问权限并尝试使用IP而不是名称 - 这可能是名称解析问题?!

对于这一小部分信息感到抱歉......这看起来只能通过运行服务器上的直接调试选项来解决问题。

答案 2 :(得分:0)

最后在星期五的最后一件事我得到了它...

正如我在更新中所说,用于整理凭证授权的工具非常方便,并且无助于设置正确的SPN记录。

我发现我还必须为SQL设置它,因为我将凭据传递到服务器。我发现停止连接的另一件事是一些导致问题的入站Windows防火墙设置。

用于连接字符串;我不得不更新到:

<add name="ConnectionStringName" connectionString="Data Source=.;Integrated Security=SSPI;Trusted_Connection=True" providerName="System.Data.SqlClient" />

我发现有用的链接:

Kerberos Authentication and SQL Server

DelegConfig

甚至它主要谈论Sharepoint ... this也很有用。

希望这有助于将来的人们。