Windows Аутентификация на странице по умолчанию, затем используйте roleProvider для предоставления доступа к определенным страницам. - PullRequest
2 голосов
/ 03 марта 2020

У меня есть модуль intr anet, который требует успешной аутентификации windows для открытия страницы индекса, затем на основе DOMAIN \ USERNAME (используя HttpContext) я получаю роль в таблице SQL.

В настоящее время для ролей я использую шаблон basi c RoleProvider для использования [Authorize(Roles = "admin,customer")] для каждой страницы в HomeController, который работает в режиме аутентификации форм (имел базовую c форму имени пользователя / пароля), но не в режиме windows, потому что я получаю внутренний логин l oop, я попробовал несколько SO-решений, и вот как выглядит мой файл WebConfig:

<system.webServer>
<modules>
  <remove name="FormsAuthenticationModule" />
  <remove name="FormsAuthentication" />
</modules>
</system.webServer>
<system.web>
<customErrors mode="Off" />
  <sessionState timeout="1"></sessionState>
<authentication mode="Windows">
  <forms loginUrl="~/Account/Login" protection="All" timeout="5"></forms>
</authentication>

<roleManager defaultProvider="roleProv" enabled="true">
  <providers>
    <clear />
    <add name="roleProv" type="proj.classCS.roleProvider" enabled="true" />
  </providers>
</roleManager>

Код alse проверяет тайм-аут в сеансе для перенаправления на страницу входа в систему при неактивности, причем оба перенаправления на страницу индекса, но в зависимости от пунктов меню роли различаются ...

[HttpPost]
public ActionResult Login(usuario u, string retornaUrl)
{
//USER PRESS LOGIN BUTTON
//WINDOWS AUTH PROMPT
//IF WINDOWS AUTH IS SUCCESSFULL
    //GET WINDOWS USER DOMAIN
    string userDomWin = System.Web.HttpContext.Current.Request.LogonUserIdentity.Name.ToString().Substring((HttpContext.User.Identity.Name.ToString().IndexOf("\\")) + 1);
    string userWin = userDomWin.Replace("DOM\\", "");
    //VALIDATE IF NETWORK USERNAME EXISTS ON SQL TABLE
    var userNet = (from d in db.user
                      where d.userNet == userWin
                      select d.userNet).FirstOrDefault();
    if (userNet != null)
    {
        //FormsAuthentication.SetAuthCookie(u.userNet, false);
        Session["uname"] = userNet.ToString();
        if (userNet != null)
        {
            return Redirect("~/Home/Index");
        }
        else
        {
            //CONN TIMEOUT / LOGOUT
            TempData["Message"] = "SESSION TIMEOUT";
            return Redirect("~/Account/Login");
        }
    }
    else
    {
        //ON ERROR REDIRECT TO LOGIN PAGE WITH MESSAGE
        TempData["Message"] = "TRY NEW CREDENTIALS";
        return Redirect("~/Account/Login");
    }
    return View();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...