2012-10-15 29 views
7

Tôi có một Ứng dụng VB.Net xác thực bằng cách sử dụng Người dùng Windows hiện tại mà không yêu cầu mật khẩu. Nó kiểm tra rằng người dùng này là thành viên của "MYDOMAIN \ ApplicationUsers" trước khi nó khởi động.Cách xác thực miền thư mục hoạt động mà ứng dụng của tôi đang chạy?

Cách kiểm tra xem đây có phải là miền thực và không phải tên miền khác có sử dụng cùng tên không? Có bất kỳ chứng chỉ hoặc khóa công khai nào để xác thực tại địa phương không? Tôi muốn kiểm tra xem ngoại tuyến này, không có máy hoặc cơ sở dữ liệu của bên thứ ba, v.v.

Trong System.DirectoryServices.ActiveDirectory Namespace là một số tin tưởng một phương thức xác thực nhưng dường như họ chỉ kiểm tra tin cậy tên miền và sử dụng tên miền chỉ có.

+0

Bạn kiểm tra xem người dùng hiện tại có phải là thành viên của nhóm này ngay bây giờ không? Nếu bạn đang sử dụng truy vấn AD, bạn có thể sử dụng SID người dùng hiện tại và xác minh họ là thành viên của nhóm. – tHand

+0

Tôi đang sử dụng Phương pháp [IsInRole (chuỗi)] (http://msdn.microsoft.com/en-us/library/microsoft.visualbasic.applicationservices.user.isinrole (v = vs.80) .aspx) trên My.Application.User Object, sử dụng tham số chuỗi được đưa ra trong câu hỏi của tôi. Bằng cách sử dụng một chuỗi với tên của tên miền này là "dễ dàng" giả mạo bằng cách tạo ra một tên miền giả mạo. Kiểm tra SID là thú vị, họ không có băm thực hoặc cert nhưng nếu không có gì an toàn như vậy được nó. –

+0

Nghe có vẻ như một vấn đề về gà/trứng. Có các chức năng .net để xác thực rằng người dùng là người mà họ nói là họ, nhưng điều đó thường liên quan đến việc yêu cầu họ nhập mật khẩu. Nếu bạn không muốn nhắc họ thì bạn phải dùng từ của họ (trong trường hợp này là DOMAIN). Ứng dụng này có nghĩa là di chuyển hoặc trong một tổ chức? Nếu trong một tổ chức của nó, bạn có thể sử dụng các manh mối khác để tìm ra một người dùng không trung thực. – tHand

Trả lời

1

Vấn đề của bạn là bạn đang sử dụng chuỗi và chuỗi như mydomain/người dùng ứng dụng không phải là duy nhất trên các tên miền. Một khả năng là sử dụng SID của nhóm người dùng ứng dụng trong miền dự kiến ​​của bạn thay vì tên. Sau đó, bạn có thể kiểm tra SID của nhóm để đảm bảo rằng nó khớp với sid cho nhóm người dùng ứng dụng dự kiến ​​trong thời gian chạy trước khi kiểm tra tư cách thành viên. Nó sẽ khó khăn hơn nhiều đối với một người dùng độc hại để giả mạo tên miền và các phần nhóm của Sid, sau đó là tên miền và tên nhóm.

Cuối cùng nếu bạn đang chạy mã trên máy được sở hữu bởi người dùng độc hại thì điều này chỉ làm tăng thanh và họ vẫn có thể phá vỡ kiểm tra này.

+0

Vui lòng cung cấp một số mã về cách thực hiện việc này. – Steve

1

Tôi đã tạo một số mã mẫu để kiểm tra SID của nhóm như Mike đã đề xuất. Bạn chỉ cần đặt SID của nhóm của bạn trong hàm tạo của lớp SecurityIdentifier để thực hiện kiểm tra đối với người dùng hiện đã đăng nhập.

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 

Để thực hiện các công việc mã bạn cần phải nhập khẩu System.DirectoryServices.AccountManagement:

Imports System.DirectoryServices.AccountManagement 

namespace này tọa lạc tại của Microsoft System.DirectoryServices.AccountManagement.dll trong đó có sẵn từ Net 4.0 Tôi tin.

Các vấn đề liên quan