標籤:
ASP.NET Identity 是4.5中引入的,支援Clamis(聲明)式樣登陸【即認證和授權分開模式】,結合owin可以實現cookie加密等功能。
1.ASP.NET Identity架構架構說明
最上面是整合實現中間(identity.entityframwork---它是實現了使用者資料的儲存方式,這層是微軟自己實現的基於EF儲存的實現層。可以直接幾重identity.core重寫以實現不同儲存方式)。
其中IuserStore UserStore是實現對使用者物件在儲存的一些資料操作方法實現,比如密碼驗證方法或者尋找使用者方法等。
identityUser繼承自底層IUser,可以擴充使用者的欄位資料等。
最終會把IUserStore作為參數執行個體化UserManager來做使用者的相關商務邏輯操作。
2、OWIN是微軟定義了一套替代IIS管道處理的東西,這樣 request和response上下文content的操作和appapliction等操作都託管給了Owin處理。
結合實現聲明式(Claims)登陸為例子解釋owin,下面是登陸代碼
// 1. 利用ASP.NET Identity擷取使用者物件var user = await UserManager.FindAsync("UserName", "Password");// 2. 利用ASP.NET Identity擷取ClaimsIdentity(identity 對象,包含使用者的基本資料 )var identity = await UserManager.CreateIdentityAsync(user, DefaultAuthenticationTypes.ApplicationCookie);// 3. 將上面拿到的identity對象利用OWIN的管道處理方法登入,加密寫入讀取coocie和處理 及管理ClaimsPrincipal對象(是2的封裝,這個對象是賦值給http--> crrentUser)AuthenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = true }, identity);
OWIN的開源實現是Katana,實現了四個
- Host: 託管我們應用程式的進程,或者宿主,可以是IIS,可以我們自己寫的程式等。主要是用來啟動,載入OWin組件,以及合理的關閉他們
- Server: 這個Server就是用來暴露TCP連接埠,維護我們上面講到的那個字典資料,然後通過OWin管理處理http請求
- Middleware : 這個中介軟體就是用來在OWin管道中處理請求的組件,你可以把它想象成一個自訂的httpModule,它會被註冊到OWin管道中一起處理http request
- Application: 這個最好理解,就我們自己開發的那個應用程式或者說是網站
以登陸為例,實現owin必須要有個聲明入口starup(建立mvc後可以在appstart檔案夾中看到)
public partial class Startup{ public void ConfigureAuth(IAppBuilder app) { // 配置Middleware 組件選項,中介軟體是為了處理不同的業務例如下面的CookieAuthenticationMiddleware,可以參考他來自訂中介軟體,可以參考開源的owin--catana代碼
//這裡是處理使用coocie登陸的中介軟體,是iappbuilder的擴充方法 app.UseCookieAuthentication(new CookieAuthenticationOptions { AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie, LoginPath = new PathString("/Account/Login"), CookieSecure = CookieSecureOption.Never, }); }}
這個是上門中介軟體擴充方法的實現
public static IAppBuilder UseCookieAuthentication(this IAppBuilder app, CookieAuthenticationOptions options){ if (app == null) { throw new ArgumentNullException("app"); } app.Use(typeof(CookieAuthenticationMiddleware), app, options); //將組件註冊進owin管道,--CookieAuthenticationMiddleware--組件是操作加密coocie的
app.UseStageMarker(PipelineStage.Authenticate); // 然後結合例如IIS(owin的HOST)的某個階段執行該組件,這裡是認證階段,還有七八種其他的例如post資料階段等 return app; }
ASP.NET Identity(處理身份資料存放區) 與 OWIN主機(實現katana驗證授權)原理概括