0

背景: 現在ログインしているユーザーが Active Directory のマーケティング グループのメンバーである場合、マーケティング会社をドロップダウン リストにロードするアプリケーションがあります。グループ ACOMP_USER_BIG は、Web サービスを介してデータベース レコード内の MarketingCompanyShortName Big と比較されます。

問題: 新しく追加された 3 つの AD グループがあり、運用環境では読み込まれませんが、ローカル開発サーバーのドロップダウンでは問題なく読み込まれます。展開担当者は既に IISReset を実行しようとしましたが、問題は解決しませんでした。すべての AD グループには読み取りアクセスのみがあり、書き込みアクセスはありません。マーケティング会社の AD グループが読み込まれない理由について、さらに詳しい情報を見つける必要があります。

グループを正しくロードするにはどうすればよいですか? または、問題がプログラミングの問題ではなく、展開または AD の問題ではないことを証明するにはどうすればよいですか?

H*ere の 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
4

1 に答える 1

0

Active Directory の設定に問題があるユーザーが、現在のユーザーが属するすべての Active Directory グループを一覧表示できる Web ページを作成することになりました。

確認するコードは次のとおりです。

  • ALG\ACOMP_USER または ALGWEB\ACOMP_USER で始まるグループの現在ログインしているユーザーの AD 資格情報
  • すべてのグループの現在ログインしているユーザーの AD 資格情報

ここで credentials.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

ここで credentials.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>

ユーザーにこの Web アプリケーションをロードさせると、ユーザーが最後に見ているものを見ることができ、リモートでサイトにアクセスしているユーザーは、ALG\ACOMP_USER_COMPANY の下の IE で Active Directory グループをロードせず、ALGWEB\ACOMP_USER_COMPANY のみをロードしていると判断しました。ユーザーは問題を抱えていました。

于 2011-06-22T19:31:30.680 に答える