Tôi có SID của người dùng là byte [] trong windowsPrincipal.getIdentity(). GetSid(). Làm thế nào tôi có thể nhận được một mục nhập thư mục hoạt động (DirectoryEntry) từ SID?Cho SID của người dùng, làm thế nào tôi có thể nhận được AD DirectoryEntry?
5
A
Trả lời
4
tôi thấy ví dụ này trong C#
// SID must be in Security Descriptor Description Language (SDDL) format
// The PrincipalSearcher can help you here too (result.Sid.ToString())
public void FindByIdentitySid()
{
UserPrincipal user = UserPrincipal.FindByIdentity(
adPrincipalContext,
IdentityType.Sid,
"S-1-5-21-2422933499-3002364838-2613214872-12917");
Console.WriteLine(user.DistinguishedName);
}
Chuyển Đổi Sang VB.NET:
' SID must be in Security Descriptor Description Language (SDDL) format
' The PrincipalSearcher can help you here too (result.Sid.ToString())
Public Sub FindByIdentitySid()
Dim user As UserPrincipal = UserPrincipal.FindByIdentity(adPrincipalContext, IdentityType.Sid, "S-1-5-21-2422933499-3002364838-2613214872-12917")
Console.WriteLine(user.DistinguishedName)
End Sub
Rõ ràng bạn có thể sau đó:
dim de as new DirectoryEntry("LDAP://" & user.DistinguishedName)
Để có được SID = S-1 -5-21- * (xin lỗi VB.NET)
' Convert ObjectSID to a String
' http://social.msdn.microsoft.com/forums/en-US/netfxbcl/thread/57452aab-4b68-4444-aefa-136b387dd06e
Dim ADpropSid As Byte()
ADpropSid = de.Properties("objectSid").Item(0)
' in my test the byte field looks like this : 01 02 00 00 00 00.......37 02 00 00
Dim SID As New System.Security.Principal.SecurityIdentifier(ADpropSid, 0)
Tôi chưa thử nghiệm C# hoặc đã sử dụng phiên bản đã chuyển đổi, nhưng đã sử dụng ở trên để trả về SID ở định dạng SDDL.
0
này cũng có thể được thực hiện trong PowerShell, miễn là bạn có Net 3.5 hoặc 4.0 có sẵn (xem https://gist.github.com/882528 nếu bạn không theo mặc định)
add-type -assemblyname system.directoryservices.accountmanagement
$adPrincipalContext =
New-Object System.DirectoryServices.AccountManagement.PrincipalContext(
[System.DirectoryServices.AccountManagement.ContextType]::Domain)
$user = [system.directoryservices.accountmanagement.userprincipal]::findbyidentity(
$adPrincipalContext
, [System.DirectoryServices.AccountManagement.IdentityType]::Sid
, "S-1-5-21-2422933499-3002364838-2613214872-12917")
$user.DisplayName
$user.DistinguishedName
0
Cách đơn giản nhất tôi đã tìm thấy là sử dụng LDAP ràng buộc. Tương tự như những gì Nick Giles đã nói. Xem thêm thông tin tại MSDN
''' <summary>
''' Gets the DirectoryEntry identified by this SecurityIdentifier.
''' </summary>
''' <param name="id">The SecurityIdentifier (SID).</param>
<System.Runtime.CompilerServices.Extension()> _
Public Function GetDirectoryEntry(ByVal id As SecurityIdentifier) As DirectoryEntry
Const sidBindingFormat As String = "LDAP://AOT/<SID={0}>"
Return New DirectoryEntry(String.Format(sidBindingFormat, id.Value))
End Function
6
Sử dụng các lớp SecurityIdentifier để chuyển đổi sid từ byte [] định dạng chuỗi và sau đó liên kết trực tiếp đến đối tượng:
DirectoryEntry OpenEntry(byte[] sidAsBytes)
{
var sid = new SecurityIdentifier(sidAsBytes, 0);
return new DirectoryEntry(string.Format("LDAP://<SID={0}>", sid.ToString()));
}
Các vấn đề liên quan
- 1. Cho SID của người dùng, làm cách nào để nhận userPrincipalName của họ?
- 2. ASP.NET - Nhận mã định danh chính/tương đối (RID) cho một DirectoryEntry/SID
- 3. Bạn có thể nhận được tên người dùng Windows (AD) trong PHP không?
- 4. Nhận xác thực người dùng AD objectGuid từ asp.net
- 5. Làm thế nào tôi có thể nhận được thông tin lỗi WPF .NET hữu ích từ máy của người dùng?
- 6. Làm thế nào tôi có thể nhận được tên (hoặc tên đầy đủ) của người dùng điện thoại?
- 7. Làm thế nào tôi có thể tìm thấy một người dùng với tham số GUID (objectGUID) trong Active Directory
- 8. Làm thế nào tôi có thể nhận được trực quan có thể nhìn thấy của UITableView?
- 9. Cách lấy tên người dùng và SID cho người dùng bằng tên miền trong ldap
- 10. làm cách nào tôi có thể nhận được thông báo của người dùng bằng API đồ thị mới
- 11. Làm thế nào để tôi có được đường dẫn hồ sơ của người dùng trong Drupal?
- 12. Facebook access_token: làm thế nào để nhận được nó khi người dùng chấp nhận ứng dụng của tôi?
- 13. Làm thế nào tôi có thể nhận được chiều cao của một chuỗi cho trước?
- 14. Làm thế nào để tôi có được AD Tên hiển thị của hiện đang đăng nhập sử dụng
- 15. người dùng nào chạy người dùng asp.net của tôi?
- 16. Làm thế nào tôi có thể nhận được Emacs để thụt lề // nhận xét của tôi với mã của tôi?
- 17. Làm thế nào tôi có thể nhận được chiều rộng của div, được viết bằng CSS
- 18. Trong wordpress multisite làm thế nào tôi có thể cho phép người dùng cài đặt plugin của riêng mình?
- 19. Bắt các nhóm của người dùng trong Active Directory
- 20. Làm thế nào tôi có thể nhận được của Python unittest để không bắt ngoại lệ?
- 21. Làm thế nào tôi có thể ràng buộc một trường để một điều khiển người dùng
- 22. Làm thế nào tôi có thể làm cho Visual Studio của tôi trông như thế này?
- 23. Làm thế nào tôi có thể nhận được độ dài của một mảng trong awk?
- 24. Làm thế nào tôi có thể nhận được các cửa sổ con của một cửa sổ cho HWND của nó?
- 25. Mono-Cecil: Làm thế nào tôi có thể nhận được một ModuleDefinition cho mscorlib?
- 26. Cho một URL, làm thế nào tôi có thể nhận được chỉ là tên miền?
- 27. Làm thế nào tôi có thể nhận được thông báo lỗi cho hàm mail()?
- 28. Làm thế nào tôi có thể nhận được giá trị của tất cả các ô được chọn trong một DataGridView?
- 29. Làm thế nào để có được tất cả người dùng trong một vai trò cụ thể?
- 30. Cách nhận SID đăng nhập trong C#