好的,所以这在我的VS测试服务器中工作(当然),但是一旦我发布到IIS,它就会中断。我需要做的就是能够获得当前登录到机器的用户的GUID(不是SID)。使用DirectoryServices,这是我最初的实现:
var guid = UserPrincipal.Current.Guid.ToString();
这给了我一个错误,我无法从GroupPrincipal转换为UserPrincipal。所以听起来应用程序试图作为一些经过身份验证的组运行。我知道,正常的方法会像HttpContext.Current.User.Identity,但我不知道该怎么办,因为它没有Guid属性,当我尝试将其转换为SID并运行LDAP查询时,它会引发异常。有人可以帮助我完成这个必要的步骤吗?
由于
更新: 好的,这是我最近的尝试:
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 entry,String propertyName)+63
System.DirectoryServices.PropertyCollection.get_Item(字符串 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 context,Type 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(Object sender,EventArgs e)+38
System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp,Object o,Object t,EventArgs e)+25 System.Web.UI.Control.LoadRecursive() +71 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint,Boolean includeStagesAfterAsyncPoint) 3048
答案 0 :(得分:1)
如果某些东西在本地运行但在IIS上运行,那么它可能是一个权限。您是否检查过IIS上的信任级别?本地VS测试服务器在完全信任的情况下运行,但IIS(尤其是7)网站可能设置为中等或更低。这导致了我之前遇到类似结果的问题,即在本地运行但在IIS上没有运行。
还值得检查app pool用户的权限。