問題タブ [principalcontext]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - Active Directory とローカル アカウント ユーザーを識別するためにデータベースに保存するもの
Active Directory とローカル マシン アカウントの両方で動作する必要がある WPF アプリケーションのアクセス許可システムを作成しています。システムがネットワークに接続されている場合と接続されていない場合があります。
ユーザーは、AD ログインまたはローカル マシン ログインのいずれかを使用してアプリケーションにログインできます。アプリケーションはデータを SQL Server Express データベースに格納し、各行には「所有者」がいます。
アプリケーションは、ログインしたユーザーが「所有」している行のみを表示します。
この質問に従って、ユーザーを識別するために保存する推奨データは LDAP ですobjectGUID
。これは、以下のコードで取得し、uniqueidentifier 列に保存できます。
ただし、UserPrincipal.Guid
は null ですContextType.MachineName
。
AD アカウントまたはローカル アカウントのいずれかを参照できる、保存できる単一の情報はありますか?
または、別の列を追加してディレクトリの種類 (AD/SAM) を指定し、別の列を使用して別の識別子 (SID) を格納する必要がありますか?
adam - SSL での LDAP 経由の PrincipalContext クラスとの AD-LDS 接続が遅い
私の開発マシンでは、AD-LDS をインストールする必要がありました。原則として問題なく動作しますが、PrincipalContext クラスを介した AD-LDS への最初の接続は非常に低速です (30 秒以上)。最初に存在しないホストまたはディレクトリに接続しようとし、タイムアウト (30 秒) 後に AD-LDS に接続して、本来の動作を実行するように思えます。
LDP.exe と SSL で接続するときに観察したのと同じ動作です。ただし、ADSI-Edit を使用すると、SSL 経由の接続は超高速です。非 SSL 経由の接続も同様です。
フィドラーに何か見えないかと探してみましたが、何もありませんでした。イベントログにも何も見つかりません。多分それは証明書の検索と関係がありますか?これは makecert で自己署名されています。
更新
さしあたって、ヒントとなる小さなことを 1 つ観察しました。AD-LDS への SSL 接続が初めて確立されたときに、システム イベント ログに次のメッセージが表示されます。
名前 _ldap._tcp.[ machineName
] の名前解決は、構成された DNS サーバーのいずれも応答しなかったため、タイムアウトになりました
ただし、メッセージは一度だけ登録されますが、サーバーへの接続ごとに 30 秒以上かかります。また、hosts-file に対応するエントリを入力しようとしましたが、何も変わりませんでした。
追加情報
おそらく証明書の問題ではありませんが、問題の解決に役立つ可能性があります。したがって、ここで証明書を作成した方法(多かれ少なかれ貨物コード):
ルート権限
サーバー証明書
作成後、ルート権限を信頼できる権限に移動し、必要な権限を付与しました。
asp.net - UserPrincipal.FindByIdentity - dev でエラーをスローする
ASP.Net (VB.Net を使用) アプリケーションを使用しています。このコード ブロックをローカルでテストして作業すると、問題なく実行されます。
ただし、初期テストのために開発 Web サーバーに昇格してから、AD からユーザーの電子メール アドレスを取得する代わりに、このエラー メッセージが表示されます。
System.DirectoryServices.DirectoryEntry.Bind(Boolean throwIfFail) で System.DirectoryServices.DirectoryEntry.Bind()
で System.DirectoryServices.DirectoryEntry.get_AdsObject() で System.DirectoryServices.PropertyValueCollection.PopulateList()
で System.DirectoryServices.PropertyValueCollection.. System.DirectoryServices.AccountManagement.PrincipalContext.DoLDAPDirectoryInitNoContainer() の System.DirectoryServices.AccountManagement.PrincipalContext.DoDomainInit () の System.DirectoryServices.AccountManagement
の System.DirectoryServices.PropertyCollection.get_Item(String propertyName)の ctor(DirectoryEntry entry, String propertyName) .PrincipalContext.Initialize()
System.DirectoryServices.AccountManagement.PrincipalContext.get_QueryCtx()
で System.DirectoryServices.AccountManagement.Principal.FindByIdentityWithTypeHelper (PrincipalContext コンテキスト、型 principalType、Nullable`1 identityType、文字列 identityValue、DateTime refDate)
で System.DirectoryServices.AccountManagement.Principal.FindByIdentityWithType C:\Work\Simon の ChangeControl.HelpersSystem.GetEmail(String& uId) の System.DirectoryServices.AccountManagement.UserPrincipal.FindByIdentity(PrincipalContext context, IdentityType identityType, String identityValue) で (PrincipalContext コンテキスト、型 principalType、IdentityType identityType、文字列 identityValue) \ChangeControl\ChangeControl\HelperClasses\HelpersSystem.vb:24行目
私は周りを見回してきましたが、これは私がやろうとしていることと一致する最も近いものです
以前の同様の問題ですが、同じではありません。 これも 私が持っているものと非常によく似た同じ解決策ですが、私のために働いていません
ユーザー名とパスワードも試してみましたが、これも機能せず、同じエラーメッセージが表示されたため、他にどのような変数を提供する必要があるかを教えてください。
私もなしで試してみましたIdentityType
が、それでも同じ問題が発生します。ありとあらゆる助けが非常に高く評価されています。
c# - Active Directory グループ内のクエリによるユーザーの検索
多くのメンバーを持つ特定のグループが与えられた場合、グループ内でクエリを実行して、DisplayName が一致するメンバーを見つけたいと考えています。
以下のコードは、私が達成したいことの非機能的な例です。最初にリスト全体をロードしてから「where」を適用したくないことに注意してください。すでにそれを実行できますが、グループが大きいため低速です。
また、実際のコードではコンテキストが Domain になっているので、わざと置き換えました。