2014-01-24 65 views
1

我正在繼續其他人的開發,並且我對MVC應用程序中當前的認證實踐知之甚少。MVC4應用程序的註銷

被設置有關身份驗證的唯一的東西是在應用程序的IIS配置:

  • .NET Authrization規則=允許,所有用戶

認證:

  • 匿名身份驗證:已啓用
  • ASP .NET模擬:已禁用
  • Windows身份驗證:服務器上啓用

利用這種配置,,瀏覽器會詢問我的登錄/密碼。我輸入我的網絡登錄名。 然後,我可以得到認同Request.RequestContext.HttpContext.User.Identity...

用戶在本地計算機,我登錄使用相同的登錄/密碼:在應用程序中沒有用戶登錄(Request.RequestContext.HttpContext.User.Identity.Name == 「」)。如果我禁用匿名身份驗證,則瀏覽器會無限次地重新詢問loginpassword。

我的第一個問題是我希望能夠註銷服務器。 從scarse info我得到了這裏和那裏我已經嘗試過: FormsAuthentication.SignOut(); - >什麼都不做 WebMatrix.WebData.WebSecurity.Logout(); - >異常,試圖訪問數據庫(我從VS2012模板之一得到這個,但我沒想到它將適用於我的情況)。 if(this.Request.RequestContext.HttpContext.Session != null) this.Request.RequestContext.HttpContext.Session.Clear(); - > Session是空的,所以這沒有任何作用。

那麼,如何註銷以重新登錄爲不同的用戶呢?

(我也想能夠識別本地計算機上的用戶,但我認爲應該在另外一個話題問。)

回答

0

刪除FormsAuth註銷方法的問題是爲Windows身份驗證.. doh!

更新:

要獲取登錄的用戶名嘗試的IPrincipal Controller.User:

User.Identity.Name 

衛生署我的壞你使用Windows身份驗證...

在這種情況下,它是緩存憑據而不是服務器/ IIS的瀏覽器,所以清除會話將無法實現任何內容。

here摘自:

「用戶證書由客戶端瀏覽器的緩存,而不是由IIS。要 強制客戶端用戶再次輸入憑據,您需要發送一個 適當的401狀態消息來響應下一個客戶端請求。 但是,這樣做會違背Windows身份驗證應該如何工作的非常合法的用戶期望 ,因此您可能需要重新考慮 。當Windows用戶憑證已被 服務器接受(通過登錄對話框或針對目標站點或區域的IE 配置下的自動提交)時,只有在以前提供的 請求資源無法訪問時,纔會出現401 憑據。在接受任何憑證 之後發送401時,用戶應該期望他們需要在首次登錄時使用不同的憑證 。如果您期待相同的憑據,那麼應該預期用戶混淆。

總而言之,如果你真的想迫使新的登錄,可能是不同的 身份驗證模式可能更合適。」

對於IE唯一的解決方法見this SO post

+0

謝謝您的回覆但是如果你閱讀我的文章,你會發現我已經嘗試了兩種方法(單獨和一起) – TTT

+0

@TTT事實上,你們是否一起使用它們? - 通常在MVC中使用表單身份驗證,你可以按照上面的方法註銷 –

+0

正如我以前的評論中提到的,我已經試過了,並且我嘗試過兩種方法)。 – TTT