在我的 C# 代码中,我需要为我的 Web 应用程序创建一个自定义标识并将其添加到 IIS 7。我执行以下操作:
string strAppPoolName = "MyAppPool";
string strUserName = Environment.UserDomainName + "\\" + "myappusername";
addUserAccount(strUserName, strUserPass);
using (ServerManager serverManager = new ServerManager())
{
//Add application pool
ApplicationPool appPool = serverManager.ApplicationPools.Add(strAppPoolName);
appPool.AutoStart = true;
appPool.ManagedPipelineMode = ManagedPipelineMode.Integrated;
appPool.ManagedRuntimeVersion = "v4.0";
appPool.ProcessModel.MaxProcesses = 1;
//Assign identity to a custom user account
appPool.ProcessModel.IdentityType = ProcessModelIdentityType.SpecificUser;
appPool.ProcessModel.UserName = strUserName;
appPool.ProcessModel.Password = strUserPass;
}
将用户添加到 Active Directory 的位置如下:
public static void addUserAccount(string sUserName, string sPassword)
{
using (PrincipalContext oPrincipalContext = new PrincipalContext(ContextType.Domain))
{
using (UserPrincipal up = new UserPrincipal(oPrincipalContext))
{
up.SamAccountName = sUserName;
up.SetPassword(sPassword);
up.Enabled = true;
up.PasswordNeverExpires = true;
up.Description = "My app's user account";
up.Save();
}
}
}
问题是当我稍后将我的站点和应用程序添加到该应用程序池下的 IIS 7 时,Web 应用程序无法运行,因为它没有足够的权限。对我来说更重要的是,即使我手动将此新用户帐户的读/写权限设置为安装我的 Web 应用程序的文件系统文件夹,一些 .NET 类(例如System.Security.Cryptography )也会失败并出现意外错误代码。
因此,在进行研究时,我发现了以下声明:
如果您使用自定义标识,请确保您指定的用户帐户是 Web 服务器上 IIS_IUSRS 组的成员,以便该帐户可以正确访问资源。此外,当您在环境中使用 Windows 和 Kerberos 身份验证时,您可能需要向域控制器 (DC) 注册服务主体名称 (SPN)。
那么,你如何做到这一点?