7

パスワードを要求せずに現在の Windows ユーザーを使用して認証する VB.Net アプリケーションがあります。起動前に、このユーザーが「MYDOMAIN\ApplicationUsers」のメンバーであることを確認します。

これが実際のドメインであり、同じ名前を使用している別のドメインではないことを確認するにはどうすればよいですか? ローカルで検証する証明書または公開鍵はありますか? サードパーティのマシンやデータベースなどを使用せずに、これをオフラインで確認したいと思います。

System.DirectoryServices.ActiveDirectory 名前空間には、いくつかの Trust と Validate メソッドがありますが、それらはドメイン間の信頼をチェックし、ドメイン名のみを使用しているように見えます。

4

2 に答える 2

1

Mike が提案したように、グループの SID をチェックするコード例を作成しました。グループの SID をクラスのコンストラクターに入れるだけSecurityIdentifierで、現在ログオンしているユーザーに対してチェックが機能します。

Private Sub DoCheck()
    Dim sid As New Security.Principal.SecurityIdentifier("S-0-0-00-0000000000-0000000000-0000000000-000"),
        result As Boolean
    result = IsUserInGroup(sid)
End Sub

Public Shared Function IsUserInGroup(sid As Security.Principal.SecurityIdentifier) As Boolean
    Dim user As UserPrincipal
    user = UserPrincipal.Current
    For Each group As Principal In user.GetGroups()
        If group.Sid.Equals(sid) Then Return True
    Next
    Return False
End Function

コードを機能させるには、インポートする必要がありますSystem.DirectoryServices.AccountManagement

Imports System.DirectoryServices.AccountManagement

この名前空間は、Microsoft のSystem.DirectoryServices.AccountManagement.dll.Net 4.0 以降で利用できるようになっていると思います。

于 2015-03-24T14:23:39.950 に答える
1

あなたの問題は、文字列を使用していることと、mydomain/application users のような文字列がドメイン間で一意ではないことです。1 つの可能性は、名前の代わりに、予想されるドメインのアプリケーション ユーザー グループの SID を使用することです。次に、メンバーシップを確認する前に、実行時にグループの SID を確認して、予想されるアプリケーション ユーザー グループの SID と一致することを確認します。悪意のあるユーザーが Sid のドメインとグループの部分をスプーフィングしてから、ドメインとグループ名をスプーフィングするのははるかに困難です。

最終的に、悪意のあるユーザーが所有するマシンでコードを実行している場合、これはハードルを上げるだけであり、このチェックを回避する可能性があります。

于 2014-09-24T20:18:58.637 に答える