我是一名ASP.NET新手,并创建了一个内部应用程序(将由组内的10个用户使用)。 其中一个目标是将用户添加到Active Directory组。出于审计目的,应用程序用户应使用自己的凭据进行AD更改(而不是为此唯一目的创建的公共ID)。该网站托管在Windows Server 2008 R2 / IIS 7.0上,一切都在企业域中。< / p>
IIS设置:
应用程序池名称:UserAppMapping,Integrated,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
`
问题:
一切正常但在代码中遇到以下行:
insGroupPrincipal.Members.Add(用户)
insGroupPrincipal.Save()
应用程序提示输入用户凭据。虽然我知道此功能中的代码是在Windows身份“IIS APPPOOL \ UserAppMapping”的上下文中运行的,但它会提示有权访问Active Directory的凭据。 app用户是否有办法修改AD群(我假设用户可以直接在AD中修改群组)而无需输入额外的凭据?
如果我从代码中删除“Using(HostingEnvironment.Impersonate())”,则在遇到GroupPrincipal.FindByIdentity时会立即失败。
web.config设置为:
身份验证模式=“Windows”
identity impersonate =“true”
提前致谢。
答案 0 :(得分:0)
执行以下操作。
步骤2:您需要一个帐户在AD中拥有比ApplicationPoolIndentity更高的权限。