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);

 结合上面和下面图片代码(引用园友的一段代码说明),基于声明的身份验证核心部分就是 var identity=new ClaimsIdentity(claims,"stringType"),声明这个后,当前用户上下文的IsAutheiticated将会被赋值为true

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验证授权)原理概括的更多相关文章

  1. ASP.NET MVC 随想录——探索ASP.NET Identity 身份验证和基于角色的授权,中级篇

    在前一篇文章中,我介绍了ASP.NET Identity 基本API的运用并创建了若干用户账号.那么在本篇文章中,我将继续ASP.NET Identity 之旅,向您展示如何运用ASP.NET Ide ...

  2. ASP.NET Identity 身份验证和基于角色的授权

    ASP.NET Identity 身份验证和基于角色的授权 阅读目录 探索身份验证与授权 使用ASP.NET Identity 身份验证 使用角色进行授权 初始化数据,Seeding 数据库 小结 在 ...

  3. ASP.NET MVC 随想录——开始使用ASP.NET Identity,初级篇

    在之前的文章中,我为大家介绍了OWIN和Katana,有了对它们的基本了解后,才能更好的去学习ASP.NET Identity,因为它已经对OWIN 有了良好的集成. 在这篇文章中,我主要关注ASP. ...

  4. 【ASP.NET Identity系列教程(三)】Identity高级技术

    注:本文是[ASP.NET Identity系列教程]的第三篇.本系列教程详细.完整.深入地介绍了微软的ASP.NET Identity技术,描述了如何运用ASP.NET Identity实现应用程序 ...

  5. [Solution] ASP.NET Identity(1) 快速入门

    本节将介绍: ASP.NET Identity简介 快速入门 扩展 ASP.NET Identity简介 身份管理在ASP.NET中存在很长世间了,ASP.NET 开发团队已经学会了很多从客户的反馈. ...

  6. ASP.NET MVC 随想录——开始使用ASP.NET Identity,初级篇(转)

    ASP.NET MVC 随想录——开始使用ASP.NET Identity,初级篇   阅读目录 ASP.NET Identity 前世今生 建立 ASP.NET Identity 使用ASP.NET ...

  7. 转载 ASP.NET MVC中使用ASP.NET Identity

    转载原地址: http://blog.jobbole.com/90695/ 在之前的文章中,我为大家介绍了OWIN和Katana,有了对它们的基本了解后,才能更好的去学习ASP.NET Identit ...

  8. ASP.NET Identity 三(转载)

    转载来源:http://www.cnblogs.com/r01cn/p/5194257.html 注:本文是[ASP.NET Identity系列教程]的第三篇.本系列教程详细.完整.深入地介绍了微软 ...

  9. ASP.NET Identity系列教程-4【Identity高级技术】

    https://www.cnblogs.com/r01cn/p/5194257.html 15 ASP.NET Identity高级技术 In this chapter, I finish my de ...

随机推荐

  1. (转载)直接用SQL语句把DBF导入SQLServer

    告诉大家一个直接用SQL语句把DBF导入SQLServer,以及txt导入Access的方法,大家抛弃BatchMove吧来自:碧血剑告诉你一个最快的方法,用SQLServer连接DBF在SQLSer ...

  2. php + mysql + sphinx 的全文检索(2)

    简单 使用php api 去查询 sphinx 的索引数据 $sphinx = new SphinxClient();                 $sphinx->SetServer (  ...

  3. win 7 64位如何安装erdas 9.2

    最主要的就是crack包必须包含这三个文件:erdas.exe、license.dat和lmgrd.exe 将这三个文件都复制到C盘安装目录下bin中,其余安装同win 7 32位系统

  4. 【git】借助github学习成果

    1.创建分支 git branch dev   //创建分支 git checkout dev  //切换分支 或者用一句  git checkout -b dev 删除一个分支  git check ...

  5. 可视化Windows服务定时任务

    思路:1.新建一个<Windows服务项目>,在里面建服务文件(可以多个),用来做要执行的任务. 2.新建一个<Windows窗体应用程序>,在这个程序里管理服务.如:安装.卸 ...

  6. 格式化说明符定义、转义字符、枚举、结构体、typedef

    1.格式化说明符定义: %i,%d:输出十进制整型数 %6d:输出十进制整型数,至少6个字符宽 %li,%ld:输出长整数 %u:输出无符号整数 %lu:输出无符号长整数(相当于:unsigned l ...

  7. maven3.1安装及配置

    1.首先下载maven3,并安装 2.环境变量配置与JAVA_HOME的配置一样 3.打开MyEclipse preferences>>Maven4MyEclipse>>Mav ...

  8. sql之表连接和group by +组函数的分析

    1.首先我们来先看一个简单的例子: 有[Sales.Orders]订单表和[Sales.Customers]顾客表,表的机构如下 业务要求:筛选  来自“按时打算”国家的用户以及所下的订单数 sele ...

  9. 你所不知道的ref

    在c#中有个关键字叫ref,它的作用是使参数按引用传递,基本用法如下: class RefExample { static void Method(ref int i) { i = ; } stati ...

  10. storyboard 总结

    1.storyboard 布局时用代码实现页面跳转: a> 获取当前 storyboard : [self storyboard] b> 为将要跳转到的 viewController 添加 ...