【问题标题】:Windows authentication without a backend?没有后端的 Windows 身份验证?
【发布时间】:2019-07-18 23:34:09
【问题描述】:

我们有一个在 ASP.Net 上运行的 Web 应用程序。我对 ASP.Net 的身份验证了解不多,但该应用程序从不要求我输入用户名和密码(在 Windows 机器上时),这真的很棒。该应用在 web.config 文件中有这个:<authentication mode="Windows" />

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

【问题讨论】:

  • 我不明白您要创建什么...如果您不打算拥有后端,那么您将拥有什么?跨度>
  • 这是一个从其他 API 获取数据的静态 HTML 网站。从技术上讲,会有后端,但我不管理它们。其他人制作了自己的后端服务器,这些服务器有自己的 API,我称之为。但是其中一些 API 需要知道当前登录的用户,这是我希望在不制作自己的后端的情况下获得的。

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


【解决方案1】:

真的,“后端”是服务器上的任何东西。没有网络服务器就不可能有一个网站,而该服务器就是“后端”。它总是在进行某种类的处理,即使它不使用 ASP.NET。

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

IIS 处理 Windows 身份验证,因此您不需要 ASP.NET 来进行 Windows 身份验证。但从技术上讲,静态意味着静态,因此您不能在提供纯 HTML 文件之前对其进行修改(除非您在 IIS 中更改会减慢实际上静态文件的内容)。

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

其中一个功能是#echo 指令,它允许您将任何 IIS 服务器变量注入到内容中。如果 Windows 身份验证已启用且正常工作,IIS 会将 DOMAIN\username 存储在 LOGON_USER 服务器变量中。

您可以将其注入您的页面,并使用 JavaScript 将域和用户名拆分为单独的部分。但是您不能将LOGON_USER 直接注入到 JavaScript 中,因为斜线被 JavaScript 解释为转义字符。所以你必须把它放在一个 HTML 元素中,然后用 JS 从那里拉出来。

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

<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>

请记住,您的 web.config 中仍然需要 &lt;authentication mode="Windows" /&gt;

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-06
    • 2010-10-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多