我有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?
HttpContext.Current.User not populated with Windows Authentication enabled
Using Windows Authentication in ASP.NET
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页面中的include以引入另一个.aspx页面。这样我就可以只使用代码来检查用户并根据用户登录名显示正确的菜单。这是MenuCheck.aspx:
<%@ Page Language="C#" %>
<% if (User.Identity.Name == @"corp\mmm976") {%>
<!-- #include file="AdminMenu.php"-->
<% } else {%>
<!-- #include file="Menu.php"-->
<% } %>
答案 0 :(得分:1)
通常,身份验证即时开箱即用,现在您需要了解有关授权的更多信息。始终建议使用Role-Based approach,因为它更安全,更方便。这意味着您的管理员应该属于某个管理员组,可以用来让他们访问管理区域。对于快速而肮脏的方法,你可以考虑像
这样的东西SortedMap
其中domain \ user(\\ encoded)是您的管理员ID。
请注意,所有这些都需要在aspx(而不是html)中编码,并且不需要表单身份验证(与Windows身份验证不同)。
此外,所有这些都可以用另一种方式完成,例如你可以创建一个专用的/ admin子目录,它可以限制访问(它也可以只在服务器上配置,不使用asp.net)。