VB.NET — Устранение неполадок членов группы Active Directory IIS7 с текстовым файлом журнала ошибок

Фон: у меня есть приложение, которое загружает маркетинговые компании в раскрывающийся список, если текущий пользователь, вошедший в систему, является членом этой маркетинговой группы в активном каталоге. Группа ACOMP_USER_BIG сравнивается с MarketingCompanyShortName Big в записях базы данных через веб-службу.

Проблема: у меня есть 3 недавно добавленные группы AD, которые не загружаются в рабочей среде, но нормально загружаются в раскрывающемся списке на моем локальном сервере разработки. Специалист по развертыванию уже пытался выполнить IISReset, но это не решило проблему. Все группы AD имеют доступ только для чтения и не имеют доступа для записи. Нам нужно узнать больше информации о том, почему рекламные группы маркетинговой компании не загружаются.

Как заставить группы загружаться правильно или доказать, что проблема не в программировании, а в развертывании или в AD?

Вот код VB.NET, который заполняет раскрывающийся список маркетинговой компании.

Private Sub GetMarketingCompanies()
    Try
        Dim marketingCompanyNamesArray As Array
        marketingCompanyNamesArray = proxy.GetMarketingCompanyNames("test", "test")

        ' code to populate marketing company drop down list based on the current logged in users active directory group that 
        ' corresponds to which marketing company they are in 

        Dim identityReferenceCollection As IdentityReferenceCollection
        Dim identityReference As IdentityReference
        identityReferenceCollection = WindowsIdentity.GetCurrent().Groups
        Dim strGroupName As String
        Dim mcisloaded As Boolean

        ' Translate the current user's active directory groups 
        For Each identityReference In identityReferenceCollection
            Dim mktGroup As IdentityReference = identityReference.Translate(GetType(NTAccount))
            ' MsgBox(mktGroup.Value)
            ' Debug.WriteLine(mktGroup.Value) 
            strGroupName = mktGroup.Value.ToString

            ' Locally User group is ALG\ACOMP_USER_ADMIN , deployed ALGWEB\ACOMP_USER_ADMIN
            ' If the user is in the admin group, load all marketing companies   
            If mktGroup.Value = "ALG\ACOMP_USER_ADMIN" Then
                mcisloaded = True
                For Each item In marketingCompanyNamesArray
                    marketingCo.Items.Add(String.Format("{0} | {1}", item.MarketingCompanyShort, item.MarketingCompanyName))
                Next

            Else
                'If not admin user (mcisloaded = False) load each group individually if it appears in AD 
                ' For Each UserGroup In WindowsIdentity.GetCurrent().Groups that begins with ALG\ACOMP_USER, load marketing companies 

                Dim MarketingCompanyShortName As String = ""
                Dim mktGroupName As String = mktGroup.Value
                If mktGroupName.StartsWith("ALG\ACOMP_USER") Then
                    Dim marketingGroupNameParts() As String = Split(mktGroupName, "_")
                    'Load MarketingCompanyShortName from the end of marketingGroupNameParts - example: ACOMP_USER_BIG
                    MarketingCompanyShortName = marketingGroupNameParts(2)

                    'If MarketingCompanyShortName exists, load it into the dropdownlist 
                    Dim Company = marketingCompanyNamesArray.Cast(Of MarketingCompany).Where(Function(ac) ac.MarketingCompanyShort = MarketingCompanyShortName).FirstOrDefault
                    If Company IsNot Nothing Then
                        marketingCo.Items.Add(String.Format("{0} | {1}", Company.MarketingCompanyShort, Company.MarketingCompanyName))
                    End If

                End If
            End If

        Next

        'END LOOP TO CHECK USER GROUPS 

    Catch ex As Exception
        WriteToEventLog(ex.Message, "GetMarketingCompanies-Method", EventLogEntryType.Error, "aComp-utility")
    End Try

End Sub

person Brian McCarthy    schedule 17.06.2011    source источник


Ответы (1)


В итоге я написал веб-страницу, которую могут открыть пользователи, имеющие проблемы с настройками активного каталога, на которой перечислены все группы активного каталога, в которых находится текущий пользователь.

Вот код, чтобы увидеть:

  • Учетные данные AD текущего вошедшего пользователя для групп, начинающихся с ALG\ACOMP_USER ИЛИ ALGWEB\ACOMP_USER
  • Текущие учетные данные пользователя AD для ВСЕХ групп

см. код программной части учетных данных.aspx.vb здесь:

Imports System.Text
Imports ACOMP_Invitation_Web_App.aComp_ServiceReference
Imports System.Security.Principal
Imports System.Net.Security
Imports System.Web.UI.WebControls


Public Class verifycredentials
Inherits System.Web.UI.Page

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    Dim identityReferenceCollection As IdentityReferenceCollection
    Dim identityReference As IdentityReference
    identityReferenceCollection = WindowsIdentity.GetCurrent().Groups
    Dim strGroupName As String

    For Each identityReference In identityReferenceCollection
        Dim mktGroup As IdentityReference = identityReference.Translate(GetType(NTAccount))
        ' MsgBox(mktGroup.Value)
        ' Debug.WriteLine(mktGroup.Value)
        strGroupName = mktGroup.Value.ToString

        Dim MarketingCompanyShortName As String = ""
        Dim mktGroupName As String = mktGroup.Value

        If mktGroupName.StartsWith("ALG\ACOMP_USER") Then
            Credentials.Text = Credentials.Text + mktGroup.Value + "<br>"
        End If
        If mktGroupName.StartsWith("ALGWEB\ACOMP_USER") Then
            Credentials.Text = Credentials.Text + mktGroup.Value + "<br>"
        End If
        If mktGroupName.StartsWith("ALG\ACOMP_user") Then
            Credentials.Text = Credentials.Text + mktGroup.Value + "<br>"
        End If
    Next
    For Each identityReference In identityReferenceCollection
        Dim mktGroup As IdentityReference = identityReference.Translate(GetType(NTAccount))
        ' MsgBox(mktGroup.Value)
        ' Debug.WriteLine(mktGroup.Value)
        strGroupName = mktGroup.Value.ToString

        Dim MarketingCompanyShortName As String = ""
        Dim mktGroupName As String = mktGroup.Value

        AllCredentials.Text = AllCredentials.Text + mktGroup.Value + "<br>"

    Next

End Sub

см. код учетных данных.aspx здесь:

    <%@ Page Language="vb" AutoEventWireup="false" CodeBehind="credentials.aspx.vb" Inherits="ACOMP_Invitation_Web_App.verifycredentials" %>

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    <html xmlns="http://www.w3.org/1999/xhtml">
    <head id="Head1" runat="server">
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>

        <br />

    Current Logged in User&#39;s AD Credentials for Groups beginning with 
    ALG\ACOMP_USER OR ALGWEB\ACOMP_USER:<br /><br />

    <asp:Label ID="Credentials" runat="server"></asp:Label>
    <br />
    <br />
    Current Logged in User&#39;s AD Credentials for ALL Groups:<br /><br />

    <asp:Label ID="AllCredentials" runat="server"></asp:Label> 
    <br />
    <br />
        </div>
        </form>
    </body>
    </html>

Когда пользователи загружали это веб-приложение, я смог увидеть, что пользователь видит на своей стороне, и определил, что пользователи, получающие удаленный доступ к сайту, не загружают свою группу активных каталогов в IE в ALG\ACOMP_USER_COMPANY, а только ALGWEB\ACOMP_USER_COMPANY, и поэтому некоторые у пользователей возникли проблемы.

person Brian McCarthy    schedule 22.06.2011