Windows身份验证没有后端?

时间:2019-07-18 23:34:09

标签: asp.net active-directory windows-authentication

我们有一个在ASP.Net上运行的Web应用程序。我对ASP.Net的身份验证了解不多,但是该应用程序从不要求我提供用户名和密码(在Windows计算机上),这确实很棒。该应用程序在web.config文件<authentication mode="Windows" />中具有此功能。

我被分配了重新创建此应用程序的任务。我注意到,后端的唯一使用是获取用户的AD帐户用户名。之后,它将发出一些需要用户名的HTTP请求。除此之外,后端毫无用处。如果是这样,那么是否有一种无需后端(ASP.Net服务器)即可获取用户凭据的方法?

1 个答案:

答案 0 :(得分:0)

实际上,“后端​​”是服务器上的任何内容。没有Web服务器,就不可能有一个网站,而该服务器就是“后端”。即使未使用ASP.NET,它也总是进行某种处理。

但是,如果我了解您的要求,您只需要一种将用户名注入到其他静态HTML文件中的方法。

IIS处理Windows身份验证,因此您不需要ASP.NET即可拥有Windows身份验证。但是从技术上讲,静态表示静态,因此您无法在投放纯HTML文件之前对其进行修改(除非您更改IIS中实际上会降低 静态文件的速度)。

但是,第二件事是使用IIS中称为Server-Side Include Directives(SSI)的功能。默认情况下,IIS被设置为通过其SSI引擎发送扩展名为Counter.stm.stm的文件,该引擎处理文件并查找特定的“指令”。

功能之一是#echo指令,它使您可以将任何IIS服务器变量注入到内容中。如果启用了Windows身份验证并且可以正常工作,则IIS将.shtml存储在DOMAIN\username服务器变量中。

您可以将其注入到页面中,并使用JavaScript将域和用户名分成不同的部分。但是由于斜线(JavaScript会将其解释为转义字符),因此无法将LOGON_USER直接注入JavaScript。因此,您必须将其放入HTML元素中,然后使用JS从此处将其提取。

这是一个简单页面的示例,该页面将域和用户名存储到JavaScript变量中并在页面上显示它们。您必须将此文件另存为LOGON_USER.stm.stm

.shtml

请记住,您的web.config中仍然需要<html> <body> <span id="domainUsername" style="display:none"><!-- #echo var = "LOGON_USER" --></span> Domain: <span id="domain"></span><br> Username: <span id="username"></span> <script> var domainUsername = document.getElementById("domainUsername").innerText.split("\\"); var domain = domainUsername[0]; var username = domainUsername[1]; document.getElementById("domain").innerText = domain; document.getElementById("username").innerText = username; </script> </body> </html>

然后,您也可以为您的网站set that file as the Default Document(因为IIS默认情况下不会使用具有这些扩展名的文件作为默认文档)。