带Active Directory的ASP.NET:用户凭据

时间:2015-01-09 21:06:19

标签: asp.net vb.net iis active-directory

我是一名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”

提前致谢。

1 个答案:

答案 0 :(得分:0)

执行以下操作。

  1. 确保将IIS身份验证设置为Windows Auth = enabled,Anonymous = false。除了web.config。
  2. 之外,还需要这样做

    步骤2:您需要一个帐户在AD中拥有比ApplicationPoolIndentity更高的权限。

    1. 您需要网络帐户才能执行AD工作。创建一个新的网络帐户,然后在IIS的应用程序池中将其从ApplicationPoolIndentity更改为自定义帐户。然后输入新的AD帐户和密码。 (我建议将AD帐户密码永不过期)