如何绑定到域服务器的登录名以获得程序访问权限

时间: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)