1. 程式人生 > >關於ASP.NET MVC中Form Authentication與Windows Authentication的簡單理解

關於ASP.NET MVC中Form Authentication與Windows Authentication的簡單理解

一般網際網路應用,如人人網,微博,都是需要使用者登入的,如果使用者不登陸,就不能使用此網站。所以,這裡都是用FormAuthentication,要求使用者填寫使用者名稱與密碼,然後登入成功後,FormAuthentication.SetAuthCookie()方式向客戶端Cookie中寫入一個認證Token.


一般企業內部的應用,企業內部資訊系統,使用Windows Auhentication. 因為企業內部都有自己的域,員工的電腦都有這個域內部的一個ID,而且這個ID是唯一的,所有的操作都會通過這個ID進行。企業內部的資訊系統是不需要使用者註冊的,用的都是這個ID,所以,使用Windows Authentication. 但是需要注意的是,FormAuthentication.SetAuthCookie()往往寫入的都是很簡單的欄位,一般是username, 而真正系統中的User實體是一個很複雜的物件,有很多資訊,所以,每次當用戶進入這個系統後,程式會根據使用者的ID或者username,找到資料庫中對應的詳細的User物件,然後放到Session中。一般這些操作是在Global.asax.cs中的Session_Start()中進行的。

protected void Session_Start(object sender, EventArgs e)
{
    var securityHelper = new SecurityHelper();
    securityHelper.Authenticate();
}

public class SecurityHelper
{

    private string GetWindowsVcnUserName()
    {
        // Get windows user
        var loggedUser = System.Web.HttpContext.Current.User.Identity;

        if (loggedUser != null)
        {
            string username = loggedUser.Name;
            username = username.Substring(username.IndexOf('\\') + 1);
            username = username.ToUpper();

            return username;
        }
        return null;
    }

    public virtual bool Authenticate()
    {
        // Inject implementation of the UserService through DI
        if (UserService == null)
        {
            UserService = Container.Resolve<UserService>();
        }

        string userLoggin = GetWindowsVcnUserName();

        // Get user from external authorization system
        var user = UserService.GetUser(userLoggin);
        if (user == null)
        {
            //說明資料庫中沒有這個使用者,此時可以根據需要設定相應的邏輯,可以提示該使用者不能訪問此係統,也可以為此使用者建立一個Guset賬號,根據需要而定
        }

        // Set session 
        System.Web.HttpContext.Session.Add("user", user);
        return true;
    }
}

此後,在該Session生存週期內,需要User資訊的時候,只要從Session中拿就可以了,因為Session中有一個詳細的User物件

相關推薦

關於ASP.NET MVCForm AuthenticationWindows Authentication簡單理解

一般網際網路應用,如人人網,微博,都是需要使用者登入的,如果使用者不登陸,就不能使用此網站。所以,這裡都是用FormAuthentication,要求使用者填寫使用者名稱與密碼,然後登入成功後,FormAuthentication.SetAuthCookie()方式向客戶端

asp.net MVC的@modelModel

在MVC的實際使用中,我們經常需要在前後臺之間傳遞資料,這也就是Model實體的使用。傳遞資料的方式還有ViewBag和ViewData兩種。具體兩種方式的區別於使用請參考MVC學習系列-ViewData與ViewBag,今天主要講解的是 MVC中的@model與Model

asp.net mvc如何處理字符串對象之間的序列化反序列化(一)

osi strong 類結構 plain pbo edate inf esc arp 前臺我們一般用ajax來發送數據到後端進行處理,如果json數據結構和後臺的實體類結構一致,就直接可以反序列化為指定的對象進行操作,非常方便。 前端發送的json數據結構: 後端實體結

Asp.Net MVC WebAPI的建立前臺Jquery ajax後臺HttpClient呼叫詳解 Asp.Net對操作Sql Server 簡單處理的SqlDB類

1、什麼是WebApi,它有什麼用途?           Web API是一個比較寬泛的概念。這裡我們提到Web API特指ASP.NET MVC Web API。在新出的MVC中,增加了WebAPI,用於提供REST風格的WebService,新生成的W

ASP.NET MVCform提交改為ajax提交

在ASP.NET MVC檢視中通過 @using (Html.BeginForm()) 產生的是form表單提交程式碼,可以用javascript程式碼截獲這個form提交,改為ajax提交,示例程式碼如下: $('#form1').submit(function

asp.net mvc Form身份認證

預設的MVC4程式在配置檔案web.config中有以下配置     <authentication mode="Forms">       <forms loginUrl="~/Account/Login" timeout="2880" />   

Asp.net MVC如何獲取控制器的名稱

tex 如何 route 控制 this .get data control str 如果在代碼中 當前controller、action的獲取RouteData.Route.GetRouteData(this.HttpContext).Values["controlle

asp.net mvchtml helper的一大優勢

ont size color 優勢 其中 系統 per .net strong 剛上手這個框架,發現其中的html helper用起來很方便,讓我們這些從web form 過渡來的coder有一種使用控件的快感,嘻嘻! 言歸正傳,我要說的是在使用它時,系統會自動執行表單的現

淺析Asp.net MVC Ajax的使用

x11 生成 table ex18 review arp javascrip tle func 在ASP.NET MVC beta中我們可以使用Ajax.BeginForm, Ajax.ActionLink來進行Ajax調用,同樣我們也可以使用一些支持Ajax 框架如jQ

ASP.NET MVC 路徑的解惑

src javascrip pan 開頭 失效 如果 語言 baidu rip 很多人在寫代碼的時候關於路徑這個問題很頭疼,其實路徑是很簡單的,只是沒人幫我們點投!初次學習程序的人,我相信肯定會遇到和我一樣的問題,比如說,“/”和“~”引用路勁的區別,接下來看吧,這篇文章肯

Asp.net mvc使用配置Unity

ges mage bsp 使用 cacti .cn 技術 效果展示 onf 第一步:添加unity.mvc 第二步:在添加之後會在app_start中生成UnityConfig.cs,UnityMvcActivator.cs 第三步:使用 第四步:效果展示 Asp

ASP.NET MVC利用Aspose.cells 將查詢出的數據導出為excel,並在瀏覽器下載。

width tdi 新增 column 需求 options 解決 印象 ats 正題前的嘮叨 本人是才出來工作不久的小白菜一顆,技術很一般,總是會有遇到一些很簡單的問題卻不知道怎麽做,這些問題可能是之前解決過的。發現這個問題,想著提升一下自己的技術水平,將一些學的新的‘好

log4net 使用總結- (1)在ASP.NET MVC 使用

站點 href 還需 配置文件 str nag org src stat 1. 去官網下載log4net.dll,增加引用到站點下(你也可以通過nuget 安裝) http://logging.apache.org/log4net/download_log4net.cgi

ASP.NET MVC使用Castle Windsor

tac col sta undle 文件中 isp path http start 平常用Inject比較多,今天接觸到了Castle Windsor。本篇就來體驗其在ASP.NET MVC中的應用過程。 Visual Studio 2012創建一個ASP.NET

ASP.NET MVC為DropDownListFor設置選中項的方法

相等 ret info href submit value and number else 在MVC中,當涉及到強類型編輯頁,如果有select元素,需要根據當前Model的某個屬性值,讓Select的某項選中。本篇只整理思路,不涉及完整代碼。 □ 思路 往前臺視圖傳的類型

asp.net mvc 使用單例

客戶端 using led sta .get list() ice 單例 namespace 有這樣一個service,需要運行的asp.net站點上,但要保證這個實例是唯一的。單例用來啟用聊天機器人,保證唯一,以免啟動多個,造成客戶端發送消息的時候,會造成每個機器人都發送

asp.net MVC Session統一驗證的方法

pla sta tails project ssi 一個 str urn string 驗證登錄狀態的方法有:1 進程外Session 2 方法過濾器(建一個類繼承ActionFilterAttribute)然後給需要驗證的方法或控制器加特性標簽 3 :新建一個Ba

ASP.NET MVC使用FluentValidation驗證實體

state route html 程序 app int pre ima add 1、FluentValidation介紹   FluentValidation是與ASP.NET DataAnnotataion Attribute驗證實體不同的數據驗證組件,提供了將實體與驗證

ASP.NET MVC錯誤處理方式

itl com archive href tle http ive hive .html http://www.cnblogs.com/shenba/archive/2011/04/16/2018441.htmlASP.NET MVC中錯誤處理方式