我有一个带有Windows身份验证的Intranet应用程序。一切正常。但是,对于某些敏感操作(可能是批准AP检查或对学生进行评分),我需要获取用户的ID和密码。目标是防止有人走到无人值守的终端,并且通常是为了不可否认。使用表单身份验证很简单 - 但我无法弄清楚如何使用Windows身份验证。
我认为这不重要,但它的MVC应用程序和身份验证是针对Active Directory进行的
答案 0 :(得分:1)
通常,服务器应用程序需要发出HTTP状态代码401以告知客户端身份验证信息。但是,在Windows身份验证的情况下,一旦用户通过身份验证,令牌将由客户端系统或浏览器缓存,并在需要时随后使用。因此,在您的情况下,即使您发出401,客户端也会再次发送相同的令牌 - 因此滥用无人值守终端的主要问题将无法解决(因为用户已经登录到系统中)。
其中一种方法是从应用程序模拟表单身份验证 - 即在敏感操作上,再次提示用户输入他/她的Windows密码(请注意,如果使用Windows身份验证,您将拥有用户名(身份))然后使用Active Directory API(或登录用户窗口API)重新验证该密码。
就个人而言,我觉得你正试图在服务器上解决问题,这是错误的结果 - 我宁愿有一个禁止解锁无人值守终端的IT政策 - 用户应该锁定工作站或拥有密码保护的屏幕保护程序。通常情况下,可以通过组策略在某种程度上强制执行这些操作。
答案 1 :(得分:0)
在我的webforms应用程序中,我有一个页面设置为仅允许Windows Auth而没有其他人,然后获取用户名(因为他们必须已经通过浏览器完成了401 auth程序)我得到他们的用户名像因此:
string username = Request.ServerVariables["LOGON_USER"];
然后我可以查询成员资格提供程序以从基础结构中获取用户信息。
或者您是否尝试手动执行401身份验证过程?
如何在asp.net windows身份验证中手动验证用户