我们有一个 ASP.NET 应用程序来管理它自己的用户、角色和权限数据库,并且我们最近在用户表中添加了一个字段来保存 Windows 域帐户。

我想让用户不必这样做 身体上的 登录我们的应用程序,而是根据当前登录的 Windows 域帐户 DOMAIN\username 自动登录。我们想要根据我们自己的用户表来验证 Windows 域帐户。

在 Windows 窗体中这是小菜一碟,是否可以在 Web 窗体中执行此操作?

我不希望用户看到 Windows 质询屏幕,我希望我们的系统能够处理登录。

澄清: :我们正在使用我们自己的自定义主体对象。

澄清: :不确定这是否有什么区别,但我们使用的是 IIS7。

有帮助吗?

解决方案

几年前我几乎做了你想做的事情。我试图为其找到一些代码,尽管它是在以前的工作中,所以代码在家里。

我记得虽然我用过 本文 作为我的起点。您设置 LDAP 提供程序,以便您可以实际运行用户与 LDAP 的检查。如果您尝试 LDAP 方法,需要确定一件事。在设置 LDAP 的设置文件中,确保 LDAP 全部大写,否则将无法解析。

其他提示

这种集成是在服务器级别,由 IIS 决定用户是否登录;IIS 将身份验证提示发送回用户,浏览器对此做出反应。

当您想使用域登录时,只有一种方法可以做到这一点: 集成 Windows 身份验证. 。仅当 IIS 服务器也是域的一部分并且用户直接访问计算机(而不是通过代理)并且从也是域的一部分的计算机(用户已适当登录)时,此功能才有效。

然而,您的自定义主要对象可能会带来乐趣和游戏;这种类型的身份验证将是 WindowsPrincipal 和 WindowsIdentity;您可以通过 User 对象访问它(请参阅 如何:在 ASP.NET 2.0 中使用 Windows 身份验证)

我假设您因为您的自定义角色而需要自定义主体?我怀疑你能否让两人玩得很好;你可以创建一个自定义的 角色提供者 它会查看您的数据存储或查看您可以查看 亚当, ,AD 的扩展,它提供基于每个程序的角色,并附带良好的管理工具。

using System.Security.Principal;
...
WindowsPrincipal wp = (WindowsPrincipal)HttpContext.Current.User;

获取当前域用户。当然,您必须确保 IIS 设置为处理 Windows 身份验证。

这可能会有所帮助:

WindowsIdentity myIdentity = WindowsIdentity.GetCurrent();

WindowsPrincipal myPrincipal = new WindowsPrincipal(myIdentity);

string name = myPrincipal.Identity.Name;
string authType = myPrincipal.Identity.AuthenticationType;
string isAuth = myPrincipal.Identity.IsAuthenticated.ToString();

string identName = myIdentity.Name;
string identType = myIdentity.AuthenticationType;
string identIsAuth = myIdentity.IsAuthenticated.ToString();
string iSAnon = myIdentity.IsAnonymous.ToString();
string isG = myIdentity.IsGuest.ToString();
string isSys = myIdentity.IsSystem.ToString();
string token = myIdentity.Token.ToString();

免责声明:我从一篇 technet 文章中得到了这个,但我找不到链接。

您可以使用 System.Threading.Thread.CurrentPrincipal.

Request.ServerVariables["REMOTE_USER"]

这尚未验证您的设置,但我记得不久前使用过它。

尝试Request.ServerVariables(“LOGON_USER”)。

如果目录安全选项设置为不允许匿名用户,则当冲浪者点击此页面时,系统将提示他们输入标准模式对话框,要求输入用户名和密码。Request.ServerVariables("LOGON_USER") 将返回该用户。

但是,这可能对您不起作用,因为您正在使用自己的自定义安全对象。如果您能弄清楚如何绕过该登录框,或者在站点要求提供 NT 凭据之前将其传递给站点,那么您就已经准备好了。

你有没有想过模仿?您可以将用户的 NT 登录凭据存储在自定义安全对象中,然后在适当的时候通过代码模拟用户。

http://msdn.microsoft.com/en-us/library/aa292118(VS.71).aspx

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top