2011-07-06 126 views
1

我有一个带有Windows身份验证的Intranet应用程序。一切正常。但是,对于一些敏感操作(可能会批准AP检查或对学生进行评分),我需要获取用户的ID和密码。目标是防止有人走到无人值守的终端,并且通常是为了不可否认。表面认证琐碎 - 但我无法弄清楚如何使用Windows身份验证。如何在asp.net windows身份验证中手动验证用户

,我不认为它很重要,但它的MVC应用程序和身份验证对Active Directory

+0

如何配置IIS? (如:窗口,窗体,匿名等) – jcolebrand

+0

IIS通常允许以上所有。这个特定的应用程序配置为Windows身份验证。正如我所说的那样,自动Windows身份验证按照它的设想运行。 我无法弄清楚的是如何手动“强制”用户进行身份验证。我使用WindowsIdentity,WindowsPrincipal等 - 但它显示了如何定义角色并提供细化的资源访问 - 这与我正在尝试做的不同... – Felix

回答

1

通常,服务器应用程序需要发出HTTP状态代码401,告诉客户端进行身份验证信息。但是,在Windows身份验证的情况下,一旦用户通过身份验证,该令牌就会被客户端系统或浏览器缓存并随后在需要时使用。因此,就你的情况而言,即使发出401,客户端也会再次发送相同的令牌 - 所以滥用无人值守终端的主要问题将无法解决(因为用户已经登录到系统中)。

其中一种方式可以模拟应用程序中的表单身份验证 - 即在敏感操作上,再次提示用户输入他/她的Windows密码(请注意,如果您使用Windows身份验证,您将已经拥有用户的名称),然后使用活动目录API(或登录用户Windows API)重新验证该密码。个人而言,我觉得你正试图解决服务器端的问题 - 这是一个错误的结局 - 我宁愿有一个IT策略来禁止无人值守的终端 - 无论是用户应该锁定工作站还是使用密码保护屏幕保护程序。通常,这些事情可以通过组策略实施。

+0

是的 - 我使用AD APis(来自http:// www.beansoftware.com/ASP.NET-Tutorials/Forms-Authentication-Active-Directory.aspx),它似乎正在工作。 我明显简化了用例...实际上,主要目的是不可否认性。换句话说,如果股票经纪人进行交易,我们需要一些审计日志,在交易时输入了名称/密码。我们的行业是不同的,情况要复杂得多 - 但这个“电子签名”要求是由合规性驱动的;不仅仅是IT政策的实施。 – Felix

+0

我只是在中间件中返回错误401,我总是得到Windows身份验证弹出窗口。但不知怎的,一旦我在中间件中返回错误401,我无法使用正确的用户名和密码进行授权。 – powerfade917

0

做在我的web表单的应用程序我有一个页面,只设置允许Windows验证,并没有其他人,然后去获取用户名(因为他们已经通过浏览器已经做了401 AUTH过程)我得到他们的用户名像这样:

string username = Request.ServerVariables["LOGON_USER"]; 

,然后我可以查询会员提供商来获得从基础设施的用户信息。

或者你是否正在尝试手动执行401认证过程?

如何手动在asp.net Windows身份验证用户