如何在 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)。
我有 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)。