我正在尝试从TeamCity进行自动部署,为我们的一个新API端点工作。我已经正确设置了所有内容,包括最后一步,TeamCity调用MSDeploy将包发送到我们的服务器(我们在这里谈论我们的Integration /测试服务器)。
一切都运行良好但是,在IIS中创建新网站时,我们从其他网站借用了一个服务用户,让应用程序池可以运行。
当我们创建新的域用户并在我们的部署中切换应用程序池时,开始失败。 MSDeploy给出的错误是:
错误:(30/10/2014 15:00:56)在远程计算机上处理请求时发生错误。 [15:00:56] [步骤1/1]错误:帐户“XXX”似乎无效。该帐户是从这个位置获得的:'system.applicationHost / applicationPools / ****** .com'。 [15:00:56] [步骤1/1]错误:无法翻译部分或全部身份参考。 [15:00:56] [步骤1/1]在System.Security.Principal.NTAccount.Translate(IdentityReferenceCollection sourceAccounts,Type targetType,Boolean forceSuccess) [15:00:56] [步骤1/1]在System.Security.Principal.NTAccount.Translate(Type targetType) [15:00:56] [步骤1/1]在Microsoft.Web.Deployment.Impersonator.GetNTAccount(String userName,String source)
XXX是我们创建的新域用户。我们打电话给我们借用'YYY'的旧域用户。我们使用第三个帐户“ZZZ”来连接Web部署。所以,一切都很好,应用程序池运行为YYY,但当我们切换到XXX时,会发生此错误。
我们看了看,但我们找不到XXX和YYY之间的任何差异。它们都在相同的AD组中,并且两者似乎在服务器上具有相同的权限。使用帐户XXX通过RDP登录服务器允许我们打开IIS GUI并浏览/管理站点。
我一直无法找到许多其他网站谈论这个问题,但它让我们完全难过。
仅供参考,我们已经重新启动了有问题的网络服务器,看看是否有帮助。它没有。
答案 0 :(得分:3)
此处返回的错误只是一般身份验证失败错误。在此特定方案中,身份验证失败是由用户原则名称与运行应用程序池的用户的SAM帐户名称之间的差异引起的。
有关在对Active Directory用户进行身份验证时使用的名称的说明,请参阅以下问题 - https://serverfault.com/questions/371150/any-difference-between-domain-username-and-usernamedomain-local
在我们的特定示例中,应用程序池的活动目录用户名超过20个字符。 SAM帐户名称具有20个字符的限制,这意味着不包括20个以上的所有字符。
如链接答案中所述,指定域和用户名时使用的格式将决定使用哪个版本的名称进行身份验证。因此,用户名为" username_longer_than_20_characters"以下格式可行:
domain \ username_longer_than - 使用SAM帐户名进行身份验证 要么 username_longer_than_20_characters @ domain - 使用用户原则名称
进行身份验证链接帖子中的答案还说明了如何检查Active Directory用户的SAM帐户名称。