我是一个ASP.NET新手,并创建一个内部应用程序(将由组内的10个用户使用)。 其中一个目标是将用户添加到Active Directory组。出于审计目的,应用程序用户应该使用自己的凭据进行AD更改(而不是为此唯一目的而创建的通用标识)。该网站托管在Windows Server 2008 R2/IIS 7.0上,并且所有内容都位于企业域中。ASP.NET与活动目录:用户凭证
IIS设置:
应用程序池名称:UserAppMapping,集成,ApplicationPoolIdentity
验证:ASP.NET模拟和Windows身份验证只被启用。
VB.NET代码(我已删除了所有的错误检查,这样我就可以看到实际的错误):
Public Sub AddUserToGroup(userId As String, groupName As String, Optional GroupDN As String = "")
Using (HostingEnvironment.Impersonate())
Dim domainName As String = "DOM"
Dim ou = [String].Format(CultureInfo.InvariantCulture, "dc={0},dc=myorg,dc=com", domainName)
Dim domain = [String].Format(CultureInfo.InvariantCulture, "{0}.myorg.com", domainName)
Using insPrincipalContext = New PrincipalContext(ContextType.Domain, domain, ou)
If insPrincipalContext IsNot Nothing Then
Dim insGroupPrincipal As GroupPrincipal = GroupPrincipal.FindByIdentity(insPrincipalContext, System.DirectoryServices.AccountManagement.IdentityType.Name, groupName)
Dim user As UserPrincipal = UserPrincipal.FindByIdentity(insPrincipalContext, userId)
If insGroupPrincipal IsNot Nothing Then
'add user to group
If user.IsMemberOf(insGroupPrincipal) Then
LabelErr.Text = userId + " is already part of " + groupName
Else
insGroupPrincipal.Members.Add(user)
insGroupPrincipal.Save()
Label1.Text = "User added successfully"
End If
Else
Label1.Text = "Cannot retrieve information about " + groupName + " from Active Directory"
End If
Else
Label1.Text = "Principal Context is Null"
End If
insPrincipalContext.Dispose()
End Using
End Using
End Sub
`
问题:
一切工作正常,但当在代码中遇到以下行时:
insGroupPri nipal.Members.Add(用户)
insGroupPrincipal.Save()
应用程序提示输入用户凭证。虽然我了解此功能中的代码正在Windows Identity“IIS APPPOOL \ UserAppMapping”的上下文中运行,但它会提示输入有权访问Active Directory的凭据。 是否有应用程序用户修改AD组(我假设用户可以直接在AD中修改组),而无需键入额外的凭据?
如果我从代码中删除“使用(HostingEnvironment.Impersonate())”,它会在遇到GroupPrincipal.FindByIdentity时立即失败。
web.config中设置有:
身份验证模式= “窗口”
身份冒充= “真”
在此先感谢。
IIS身份验证已设置为Windows身份验证和ASP.NET模拟。匿名设置为False。如果我创建一个新的网络帐户并设置为应用程序池标识,那么不应该该帐户执行AD中的所有写入操作吗?那么我将如何知道哪个应用程序用户实际进行了更改? – FromNY 2015-01-11 15:41:02