Как использовать проверку подлинности 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 чтобы получить имя пользователя, это не сработало. Я также посмотрел на несколько других ответов, пытаясь найти то, что будет работать для меня. Самая большая проблема, с которой я столкнулся, заключается в том, что у меня нет доступа к самому серверу. Все, что у меня есть, это то, что я показал выше, чтобы заставить это работать. Я могу отобразить свое имя пользователя на экране, но я не знаю, как использовать это в ifelse где-то, чтобы я мог изменить меню.

Я проверил следующее:

Как получить Текущий пользователь, который получает доступ к приложению 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).

Другие вопросы по тегам