Излезте от приложението MVC4

Продължавам разработката на някой друг И не знам много за текущите практики за удостоверяване в MVC приложения.

Единствените неща, които са зададени относно удостоверяването, са в IIS конфигурацията на приложението:

  • Правила за удостоверяване на .NET = Разрешаване, Всички потребители

Удостоверяване:

  • Анонимно удостоверяване: Активирано
  • Имитиране на ASP .NET: забранено
  • Удостоверяване на Windows: Активирано

При тази конфигурация, на сървъра, браузърът ме пита за вход/парола. Въвеждам данните си за вход в мрежата. Тогава мога да идентифицирам потребителя с Request.RequestContext.HttpContext.User.Identity...

На локален компютър, където влизам със същото име/парола: нито един потребител не е влязъл в приложението (Request.RequestContext.HttpContext.User.Identity.Name == ""). Ако деактивирам анонимното удостоверяване, браузърът просто продължава да иска безкрайно парола за влизане.

Първият ми проблем е, че бих искал да мога да изляза от сървъра. От оскъдна информация, която получих тук и там, вече опитах: FormsAuthentication.SignOut(); --> не прави нищо WebMatrix.WebData.WebSecurity.Logout(); --> Изключение, опитва се да получи достъп до база данни (получих това от един от шаблоните VS2012, но не мислех, че ще се приложи към моят контекст). if(this.Request.RequestContext.HttpContext.Session != null) this.Request.RequestContext.HttpContext.Session.Clear(); --> Сесията е нула, така че това не прави нищо.

И така, как мога да изляза, за да вляза отново като друг потребител?

(Бих искал също да мога да идентифицирам потребителя на локалния компютър, но мисля, че това трябва да бъде зададено в друга тема.)


person TTT    schedule 24.01.2014    source източник


Отговори (1)


Премахнат метод за излизане от FormsAuth, тъй като въпросът е за Windows Auth... да!

Актуализация:

За да получите влязлото потребителско име, опитайте IPrincipal Controller.User:

User.Identity.Name

Жалко, че използвате Windows Authentication...

В този случай браузърът кешира идентификационните данни, а не сървърът / IIS, така че изчистването на сесията няма да постигне нищо.

Взето от тук:

„Идентификационните данни на потребителя се кешират от браузъра на клиента, а не от IIS. За да принудите потребителя на клиента да въведе отново идентификационни данни, ще трябва да изпратите подходящо съобщение за състояние 401 в отговор на следващата клиентска заявка. Това обаче ще се изпълни противоречи на много легитимните потребителски очаквания за това как трябва да работи удостоверяването на Windows, така че може да искате да преразгледате.Когато потребителските идентификационни данни на Windows вече са приети от сървър (или чрез диалогов прозорец за влизане, или автоматично изпращане под конфигурацията на IE за целевия сайт или зона), 401 се очаква само ако заявеният ресурс не може да бъде достъпен с предварително предоставените идентификационни данни. Когато изпратите 401, след като всички идентификационни данни са били приети преди това, потребителят трябва да очаква, че трябва да използва различни идентификационни данни от първоначалното си влизане. Ако очаквате същите идентификационни данни, тогава трябва да се очаква объркване на потребителите.

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

За заобиколно решение само за IE вижте тази публикация за SO.

person Paul Zahra    schedule 24.01.2014
comment
Благодаря ви за отговора, но ако прочетете поста ми, ще видите, че вече съм пробвал и двете (поотделно и заедно). - person TTT; 24.01.2014
comment
@TTT Наистина, но използвахте ли ги и двете заедно? - Обикновено в MVC с удостоверяване на формуляри ще излезете от системата по метода по-горе. - person Paul Zahra; 24.01.2014
comment
Както споменах в предишния ми коментар, опитах поотделно И опитах и ​​двете заедно). - person TTT; 24.01.2014