Хорошо, так что это работало на моем тестовом сервере VS (естественно), но как только я публикуюсь в IIS, он ломается. Чтобы это работало, мне нужно иметь возможность получить идентификатор GUID (не SID, пожалуйста) пользователя, который в данный момент вошел в систему. Используя DirectoryServices, это была моя оригинальная реализация:
var guid = UserPrincipal.Current.Guid.ToString();
Это дает мне ошибку, которую я не могу привести из GroupPrincipal к UserPrincipal. Похоже, приложение пытается работать как какая-то аутентифицированная группа или что-то в этом роде. Я понимаю, что нормальным подходом было бы что-то вроде HttpContext.Current.User.Identity, но я не уверен, что делать с этим, поскольку у него нет свойства Guid, и когда я пытаюсь преобразовать его в SID и выполнить запрос LDAP Это исключение. Может ли кто-нибудь помочь мне с необходимыми шагами для достижения этой цели?
Спасибо
UPDATE:
Хорошо, вот моя самая последняя попытка:
protected string GetUserGuid()
{
var pc = new PrincipalContext(ContextType.Domain);
var windowsID = HttpContext.Current.User.Identity;
var up = UserPrincipal.FindByIdentity(pc, windowsID.Name);
return up.Guid.ToString();
}
И исключение, которое я получаю:
[COMException (0x8007054b): указанный домен либо не существует
или не удалось связаться. ]
System.DirectoryServices.DirectoryEntry.Bind (Boolean throwIfFail) +788
System.DirectoryServices.DirectoryEntry.Bind () + 44
System.DirectoryServices.DirectoryEntry.get_AdsObject () + 42
System.DirectoryServices.PropertyValueCollection.PopulateList () + 29
System.DirectoryServices.PropertyValueCollection..ctor (DirectoryEntry
запись, String propertyName) + 63
System.DirectoryServices.PropertyCollection.get_Item (String
propertyName) + 163
System.DirectoryServices.AccountManagement.PrincipalContext.DoLDAPDirectoryInitNoContainer ()
+436 System.DirectoryServices.AccountManagement.PrincipalContext.DoDomainInit ()
+51 System.DirectoryServices.AccountManagement.PrincipalContext.Initialize ()
+141 System.DirectoryServices.AccountManagement.PrincipalContext.get_QueryCtx ()
+42 System.DirectoryServices.AccountManagement.Principal.FindByIdentityWithTypeHelper (PrincipalContext
контекст, тип PrincipalType, Nullable`1 identityType, String
identityValue, DateTime refDate) + 29
System.DirectoryServices.AccountManagement.UserPrincipal.FindByIdentity (PrincipalContext
context, String identityValue) +95 TicketsToMe.GetUserGuid () + 123
TicketsToMe.Page_Load (Отправитель объекта, EventArgs e) + 38
System.Web.Util.CalliHelper.EventArgFunctionCaller (IntPtr fp, Object
o, Объект t, EventArgs e) +25 System.Web.UI.Control.LoadRecursive ()
+71 System.Web.UI.Page.ProcessRequestMain (логическое значение includeStagesBeforeAsyncPoint, логическое значение includeStagesAfterAsyncPoint)
+ 3048