如何绑定到域服务器的登录名以获得程序访问权限
时间:2020-03-05 18:58:57 来源:igfitidea点击:
我需要编写一个内部使用的程序,其中不同的用户在程序中将具有不同的能力。
而不是使用户拥有新的用户名和密码,我该如何绑定到现有域服务器的登录系统?
假设.NET(C#,VB,ASP等)
-亚当
解决方案
回答
对于WinForms,将System.Threading.Thread.CurrentPrincipal与IsInRole()方法一起使用以检查它们是哪些组的成员。我们确实需要首先将AppDomain的主体策略设置为WindowsPrincipal。
使用它来获取当前用户名:
private string getWindowsUsername() { AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal); return Thread.CurrentPrincipal.Identity.Name; }
然后像这样检查角色:
if (Thread.CurrentPrincipal.IsInRole("Domain Users") == true) {}
在ASP.NET中,该线程属于IIS,因此我们应该
- 设置虚拟文件夹或者网站以要求身份验证
- 使用Request.ServerVariables(" LOGON_USER")获取浏览器提供的用户名。
- 使用DirectorySearcher类查找用户组
回答
我会使用LDAP
和DirectorySearcher类:
http://msdn.microsoft.com/zh-CN/library/system.directoryservices.directorysearcher.aspx
回答
假设这是通过IIS提供的,我将告诉IIS通过域进行身份验证,但是我将在应用程序内部保留授权(用户与哪些角色相关联,可访问的功能等)。
我们可以检索用于通过进行身份验证的用户名
Trim(Request.ServerVariables("LOGON_USER")).Replace("/", "\").Replace("'", "''")
或者
CStr(Session("User")).Substring(CStr(Session("User")).LastIndexOf("\") + 1)