使用直通身份验证将 Web 部署到 IIS 7

使用直通身份验证将 Web 部署到 IIS 7

经过多次反复试验配置后,我现在能够编写脚本 msdeploy.exe,将 Visual Studio 2010 中构建的包部署到运行 IIS 7.5 的远程服务器,命令行如下:

基本身份验证命令:

msdeploy -source:package="project.zip" -dest:auto,computerName='https://webserver:8172/MsDeploy.axd',authtype='Basic',username='DOMAIN\myuser',password='xxx',includeAcls='False' -verb:sync -setParamFile:"SetParameters.xml" -allowUntrusted

我可以通过启用传递身份验证来消除在命令行中提供密码的需要吗?Web Deploy 文档提到了 authType 参数可以指定“NTLM”,而不是 Basic。但是,每当我尝试这样做时(参见下面的示例),我都会收到指示 401 的错误。WMSvc Web 日志显示 401.2,并且该日志条目中没有填充用户 ID,与之前使用 Basic 身份验证的尝试不同,Web 日志中确实显示了 DOMAIN\myuser。在客户端或服务器的事件查看器中找不到其他有用的信息。

注意:目标网络服务器位于另一个域上,因此我执行了net use \\webserver /u:DOMAIN\myuser一个建立令牌的操作。

传递身份验证命令尝试:

msdeploy -source:package="project.zip" -dest:auto,computerName='https://webserver:8172/MsDeploy.axd',authtype='NTLM',includeAcls='False' -verb:sync -setParamFile:"SetParameters.xml" -allowUntrusted

看来 msdeploy.exe 未在 HTTP 级别正确与 IIS 进行身份验证。可能是什么问题?

客户端是 Windows XP,服务器是 Win2008R2。两者都运行 msdeploy.exe 版本 7.1.618.0。两者都安装了 .NET 2.0、3.5 和 4.0。

答案1

我猜如果客户端计算机不在同一个域中,我们就不能使用直通身份验证。如果您使用 web deploy 1.1,您可以尝试 storeCredentials 和 getCredentials 以避免直接在命令行中输入用户名和密码。

答案2

这显然是一个迟来的答案,我相信你已经解决了这个问题或者解决了它,但如果这对别人有帮助:

即使目标 Web 服务器位于另一个域中,您也可以使用 MSDeploy 通过 NTLM 身份验证部署包。以下是我们使用的命令行:

msdeploy.exe -source:package='MyPackage.csproj.zip' -dest:auto,computerName='https://www.myserver.com:8172/MsDeploy.axd?site=mysitename',authtype='NTLM',includeAcls='False' -verb:sync -disableLink:AppPoolExtension -disableLink:ContentExtension -disableLink:CertificateExtension -setParamFile:"MyPackage.csproj.SetParameters.xml"

为了实现这一点,我们在源计算机中以用户名+密码的安全上下文运行此命令,完全匹配目标域上的用户名+密码。

param 文件可能与身份验证无关,但我只是为了完整性而将其包括在内。这是我们根据应用程序的部署位置应用不同连接字符串的方法。

我们不使用“网络使用”方法来建立令牌,我不确定这是否可以通过 HTTP 轻松转换为 NTLM 身份验证。

答案3

我可能没有完全理解您的问题,但是您可以使用 -storeCredentials 和 -getCredentials 标志来完成此操作吗?

答案4

转到 IIS 站点管理页面 -> IIS -> 身份验证

启用匿名身份验证 -> 指定 IIS 来宾用户 (IUSER_computername)

授予 IIS 来宾用户对网站 wwwroot 文件夹的权限。

相关内容