Как использовать проверку подлинности Windows в HTML в 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
где-то, чтобы я мог изменить меню.
Я проверил следующее:
Как получить Текущий пользователь, который получает доступ к приложению ASP.net?
HttpContext.Current.User не заполнен с включенной аутентификацией Windows
Использование проверки подлинности Windows в ASP.NET
Как проверить, вошел ли пользователь в систему
Рецепт: включение аутентификации Windows в веб-приложении ASP.NET для интрасети
РЕДАКТИРОВАТЬ
Я получил это на работу:
<% 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"-->
<% } %>
1 ответ
Как правило, аутентификация работает "из коробки", и теперь вам нужно больше узнать об авторизации. Всегда рекомендуется использовать ролевый подход, потому что он более безопасный и удобный. Это означает, что ваши администраторы должны принадлежать к определенной группе администраторов, которую можно использовать для предоставления им доступа к административной области. Для быстрого и грязного подхода вы могли бы подумать о чем-то вроде
<% if (User.Identity.GetUserID() == "domain\\user") { %>
<!-- #include file="AdminMenu.php"-->
<% } %>
где домен \ пользователь (\\ кодированный) - это ваш админский идентификатор.
Обратите внимание, что все это необходимо кодировать в aspx (не в html) и не требует проверки подлинности с помощью форм (что отличается от проверки подлинности Windows).
Кроме того, все это можно сделать по-другому, например, вы можете создать выделенный подкаталог / admin, который может иметь ограниченный доступ (его также можно настроить только на сервере, без использования asp.net).