如何在 default.aspx 中的 html 中使用 Windows 身份验证

How to use Windows Authentication in html in default.aspx

我有 2 个菜单,一个是为普通用户设置的,另一个是为管理员用户设置的。我想检查谁登录了(基于他们的 AD 登录到他们的计算机)然后显示到适当的菜单。

我正在做一个网站。我的主页现在很简单,但我正在尝试让身份验证工作,以便我可以向我们的内部用户开放该站点,并将管理部分保留给管理员。到目前为止我得到的并不多。这是 web.config:

    <system.web>
        <authentication mode="Windows" />
        <authorization>
            <deny users="?"/>
        </authorization>
    </system.web>

这里是 default.aspx:

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8" />
        <title>Frontier Reports</title>
        <link rel="StyleSheet" href="stylesheet.css" type="text/css">
        <script>

            var resize = setInterval(function () { chng_iframe_height('MainPageFrame', 'header', 'footer') }, 500);

            function chng_iframe_height(ifrid, hid, fid)
            {

                var eheight = window.innerHeight;
                var ifrobj = document.getElementById(ifrid);
                var header = document.getElementById(hid);
                var footer = document.getElementById(fid);
                var header_height = getComputedStyle(header).height;
                var footer_height = getComputedStyle(footer).height;

                var reserved_height = parseInt(header_height) + parseInt(footer_height);
                var reserved_height = reserved_height + 65;

                ifrobj.style.height = eheight - reserved_height + "px";

            }
        </script>
    </head>
    <body onload="chng_iframe_height('MainPageFrame','header','footer');">
        <!-- #include file="MenuCheck.aspx"-->
        <div id="header">
            <div class="wrap">
                <div class="logo">
                    <h1></h1>
                </div>
            </div>
        </div>
        <iframe src="MainPage.aspx" name="MainPage" id="MainPageFrame" FrameBorder=0>
            This will show up if Chrome doesn't understand IFrame.
        </iframe>
        <div id="footer">
        <asp:LoginName ID="LoginName1" FormatString="{0}" runat="server" />
            <div class="wrap">
                <h2></h2>
            </div>
        </div>
    </body>
</html>

如你所见,我没有多少。我试过使用 script 来获取用户名,但没有用。我还查看了其他几个答案,试图找到适合我的东西。我遇到的最大问题是我无权访问服务器本身。我所拥有的就是我在上面展示的让这个工作的东西。我可以在屏幕上显示我的用户名,但我不知道如何在 if else 某处使用它来更改菜单。

我查看了以下内容:

How to get Current User who's accessing ASP.net app?

How to check if user is logged in

Recipe: Enabling Windows Authentication within an Intranet ASP.NET Web application

编辑

我成功了:

<% if(1 == 1) {%>
<!-- #include file="AdminMenu.php"-->
<% } else {%>
<!-- #include file="Menu.php"-->
<% } %>

如果我尝试将其更改为 if(User.Identity.GetUserID() == "CORP\mmm976")if(User.Identity.Name == "CORP\mmm976"),则会出现服务器错误。

我添加了这个 <%using Microsoft.AspNet.Identity%> 来尝试让 GetUserID() 工作。还是服务器错误。

最终编辑

现在可以使用了!

我更改了 Default.aspx 页面中的包含以引入另一个 .aspx 页面。这样我就可以拥有检查用户并根据用户登录名显示正确菜单的代码。这是 MenuCheck.aspx:

<%@ Page Language="C#" %>

<% if (User.Identity.Name == @"corp\mmm976") {%>
<!-- #include file="AdminMenu.php"-->
<% } else {%>
<!-- #include file="Menu.php"-->
<% } %>

通常,身份验证开箱即用,现在您需要了解有关授权的更多信息。始终建议使用 Role-Based approach,因为它更安全、更方便。这意味着您的管理员应该属于某个管理员组,可以用来让他们访问管理区域。对于快速而肮脏的方法,您可以考虑

<% if (User.Identity.GetUserID() == "domain\user") { %>
<!-- #include file="AdminMenu.php"-->
<% } %>

其中 domain\user(\\ 编码)是您的管理员 ID。

请注意,所有这些都需要在 aspx 中编码(而不是在 html 中)并且不需要表单身份验证(这与 Windows 身份验证不同)。

此外,所有这些都可以通过其他方式完成,例如你可以创建一个专用的 /admin 子目录,它可以限制访问(它也可以只在服务器上配置,而不使用 asp.net)。