【发布时间】:2015-01-09 21:06:18
【问题描述】:
我是 ASP.NET 新手,正在创建一个内部应用程序(将由组内的 10 个用户使用)。 目标之一是将用户添加到 Active Directory 组。出于审计目的,应用程序用户应使用自己的凭据(而不是为此唯一目的创建的通用 ID)进行 AD 更改。该网站托管在 Windows Server 2008 R2/IIS 7.0 上,一切都在企业域中。
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(user)
insGroupPrincipal.Save()
应用程序提示输入用户凭据。虽然我了解此函数中的代码在 Windows 身份“IIS APPPOOL\UserAppMapping”的上下文中运行,但它会提示输入可以访问 Active Directory 的凭据。 应用用户有没有办法修改 AD 组(我假设用户可以直接在 AD 中修改组)无需输入额外的凭据?
如果我从代码中删除“Using (HostingEnvironment.Impersonate())”,当遇到 GroupPrincipal.FindByIdentity 时它会立即失败。
web.config 设置为:
身份验证模式="Windows"
身份模拟=“真”
提前致谢。
【问题讨论】:
标签: asp.net vb.net iis active-directory