在我的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应用程序无法运行,因为它没有足够的权限。对我而言,更重要的是,一些.NET类(例如System.Security.Cryptography)会以意外的错误代码失败,即使我已经手动设置了新用户帐户对Web应用程序所安装的文件系统文件夹的读/写权限。
因此,在做研究时,我找到了以下声明:
如果您使用自定义标识,请确保您指定的用户帐户是Web服务器上IIS_IUSRS组的成员,以便帐户具有适当的资源访问权限。此外,当您在环境中使用Windows和Kerberos身份验证时,您可能需要向域控制器(DC)注册服务主体名称(SPN)。
那么,如何做到这一点呢?