[ASP.NET MVC] ASP.NET Identity登入技术剖析

[ASP.NET MVC] ASP.NET Identity登入技术剖析

前言

ASP.NET Identity是微软所贡献的开源项目,用来提供ASP.NET的验证、授权等等机制。本篇文章介绍ASP.NET Identity在执行登入功能时,与浏览器、还有第三方验证服务之间的运作流程。主要为自己留个纪录,也希望能帮助到有需要的开发人员。(本篇内容大幅度简化了ASP.NET Identity的运作细节,用以传达登入功能的运作概念。实际ASP.NET Identity在运作的时候,比本篇说明的复杂很多。)

Unauthorized(未登入)

  1. 当使用者使用浏览器,第一次进入ASP.NET站台。
  2. 因为还没有完成登入的动作,所以被ASP.NET判断为「未登入」。
  3. 这时使用者要求使用的资源,如果是被打上[Authorize]标签的Controller或是Action。[Authorize]标签会判别用户未登入,就回传HTTP 401状态代码。
  4. ApplicationCookieMiddleware是一个Identity挂载到ASP.NET的Middleware,这个Middleware会去拦截HTTP 401状态代码。

  5. ApplicationCookieMiddleware拦截到HTTP 401状态代码之后,会更改回传的内容。改为回传HTTP 302状态代码以及一个Login页面的URL。

  6. 浏览器接收到HTTP 302状态代码,会自动跳转页面到回传内容所夹带的Login页面URL。
  7. ASP.NET站台会回传Login页面给浏览器,要求用户进行登入作业。

Authentication(验证)

  1. 使用者在Login页面,选择使用Facebook验证后,Login页面会连结到ExternalLogin这个Action。
  2. ExternalLogin在收到使用者选择使用Facebook验证后,会回传一个ChallengeResult, 来引发Challenge。因为使用者是选择使用Facebook验证,所以这个Challenge动作会交由FacebookAuthenticationMiddleware来处理。
  3. 接着FacebookAuthenticationMiddleware会发起一个OAuth的流程,来在Facebook站台、用户浏览器之间交换信息,用以认证一个使用者。(参考数据:OAuth 2.0 笔记 - Yu-Cheng Chuang)
  4. 完成OAuth流程之后,FacebookAuthenticationMiddleware就可以依照取得的用户信息,来建立一个FBUser。
  5. FBUser会被拿来做为SignIn动作的参数。这个SignIn动作,会被导到Identity挂载的ExternalCookieMiddleware去执行。

  6. 在ExternalCookieMiddleware里,会将FBUser编码为Cookie内容,并且附加到回传内容里。
  7. 完成SignIn动作后,FacebookAuthenticationMiddleware会更改回传的内容。改为回传HTTP 302状态代码、编码为Cookie内容的FBUser、以及一个ExternalLoginCallback URL。

Authorization(授权)

  1. 浏览器接收到HTTP 302状态代码,会自动跳转页面到回传内容所夹带的ExternalLoginCallback URL,并且也同时回传编码为Cookie内容的FBUser。
  2. ASP.NET会从Cookie内容里译码出FBUser,并且依照编码FBUser为Cookie时的定义,将登入状态定义为「未登入」。

  3. 接着这个FBUser,会被提交给ASP.NET Identity,用以从Identity里取得系统使用的APPUser。这个APPUser除了用户相关数据外,也包含了授权给该用户的Role数据。
  4. APPUser会被拿来做为SignIn动作的参数。这个SignIn动作,会被导到Identity挂载的ApplicationCookieMiddleware去执行。
  5. 在ApplicationCookieMiddleware里,会将APPUser编码为Cookie内容,并且附加到回传内容里。
  6. 完成SignIn动作后,ASP.NET Identity会更改回传的内容。改为回传HTTP 302状态代码、以及编码为Cookie内容的APPUser。

Authorized(已登入)

  1. 完成上述流程之后。使用者每次使用浏览器进入ASP.NET站台时,都会夹带编码为Cookie内容的APPUser。
  2. ASP.NET会从Cookie内容里译码出APPUser,并且依照编码APPUser为Cookie时的定义,将登入状态定义为「已登入」。

  3. 使用者要求使用的资源,如果是被打上[Authorize]标签的Controller或是Action。[Authorize]标签会判别用户已登入,允许并执行功能内容。
  4. ASP.NET站台执行执行功能内容后,会回传功能页面给浏览器。至此也就完成了,整个ASP.NET Identity登入的流程。
时间: 2024-10-12 13:25:20

[ASP.NET MVC] ASP.NET Identity登入技术剖析的相关文章

Asp.net MVC]Asp.net MVC5系列——添加视图

目录 概述 添加视图 总结 系列文章 [Asp.net MVC]Asp.net MVC5系列--第一个项目 概述 在这一部分我们添加一个新的控制器HelloWorldController类,以便使用视图来向客户端展示HTML格式的响应结果. 我们将使用Razor视图引擎创建一个视图.Razor视图模板以.cshtml扩展名结尾,它提供了一种简洁的方式来创建HTML输出流.Razor视图大大减少了在书写视图模板文件时所需要输入的字符,提供了一个最快捷,最简便的编码方式. (注意:之前版本的asp.

[Asp.net MVC]Asp.net MVC5系列——在模型中添加验证规则

目录 概述 在模型中添加验证规则 自定义验证规则 伙伴类的使用 总结 系列文章 [Asp.net MVC]Asp.net MVC5系列——第一个项目 [Asp.net MVC]Asp.net MVC5系列——添加视图 [Asp.net MVC]Asp.net MVC5系列——添加模型 [Asp.net MVC]Asp.net MVC5系列——从控制器访问模型中的数据 [Asp.net MVC]Asp.net MVC5系列——添加数据 概述 上篇文章中介绍了添加数据,在提交表单的数据的时候,我们需

Asp.net MVC]Asp.net MVC5系列——在模型中添加

目录 概述 在模型中添加验证规则 自定义验证规则 伙伴类的使用 总结 系列文章 [Asp.net MVC]Asp.net MVC5系列--第一个项目 [Asp.net MVC]Asp.net MVC5系列--添加视图 [Asp.net MVC]Asp.net MVC5系列--添加模型 [Asp.net MVC]Asp.net MVC5系列--从控制器访问模型中的数据 [Asp.net MVC]Asp.net MVC5系列--添加数据 概述 上篇文章中介绍了添加数据,在提交表单的数据的时候,我们需

Asp.net MVC]Asp.net MVC5系列——Razor语法

目录 概念 Razor语法 总结 系列文章 [Asp.net MVC]Asp.net MVC5系列--第一个项目 [Asp.net MVC]Asp.net MVC5系列--添加视图 [Asp.net MVC]Asp.net MVC5系列--添加模型 [Asp.net MVC]Asp.net MVC5系列--从控制器访问模型中的数据 [Asp.net MVC]Asp.net MVC5系列--添加数据 [Asp.net MVC]Asp.net MVC5系列--在模型中添加验证规则 [Asp.net

[Asp.net MVC]Asp.net MVC5系列——实现编辑、删除与明细信息视图

目录 概述 实现信息的明细视图 实现信息的编辑视图 实现信息的删除视图 总结 系列文章 [Asp.net MVC]Asp.net MVC5系列——第一个项目 [Asp.net MVC]Asp.net MVC5系列——添加视图 [Asp.net MVC]Asp.net MVC5系列——添加模型 [Asp.net MVC]Asp.net MVC5系列——从控制器访问模型中的数据 [Asp.net MVC]Asp.net MVC5系列——添加数据 [Asp.net MVC]Asp.net MVC5系列

[Asp.net MVC]Asp.net MVC5系列——添加数据

目录 概述 显示添加数据时所用表单 处理HTTP-POST 总结 系列文章 [Asp.net MVC]Asp.net MVC5系列——第一个项目 [Asp.net MVC]Asp.net MVC5系列——添加视图 [Asp.net MVC]Asp.net MVC5系列——添加模型 [Asp.net MVC]Asp.net MVC5系列——从控制器访问模型中的数据 概述 上篇文章介绍了如何通过控制器访问模型中的数据,在本节中我们将要在数据库中追加并保存一些数据.我们将要创建一个表单以及一些表单输入

[Asp.net MVC]Asp.net MVC5系列——添加模型

目录 概述 添加模型 总结 系列文章 [Asp.net MVC]Asp.net MVC5系列——第一个项目 [Asp.net MVC]Asp.net MVC5系列——添加视图 概述 在本节中我们将追加一些类来管理数据库中的学生信息.这些类将成为我们的MVC应用程序中的“模型”部分. 在vs2013中EF的版本为(Entity Framework)EF6,我们将使用EF6来进行对学生信息的维护,顺便也学习一下EF6的增删改查. 添加模型 在解决方案资源管理器中,鼠标右击Models文件夹,点击“添

[Asp.net MVC]Asp.net MVC5系列——第一个项目

目录 概述 创建第一个项目 添加控制器 总结 概述 本教程是个人一步一步学习的总结,希望能帮到正在进入ASP.Net MVC5方向的朋友,个人也是准备进入ASP.NET MVC5领域,虽然艰辛,但是乐此不彼.谁让咱喜欢编程呢?之前接触过ASP.NET MVC4,今天在看发现差别还是有的,不管是使用IDE创建方式,还是使用方式有些地方的确不一样了.手上也没有ASP.NET MVC5的教程,只能看着英文网站,一步一步摸索了.其实我是一直想使用mvc,可事与愿违啊,到目前还是使用的webform. 创

[Asp.net MVC]Asp.net MVC5系列——从控制器访问模型中的数据

目录 概述 从控制器访问模型中的数据 强类型模型与@model关键字 总结 系列文章 [Asp.net MVC]Asp.net MVC5系列——第一个项目 [Asp.net MVC]Asp.net MVC5系列——添加视图 [Asp.net MVC]Asp.net MVC5系列——添加模型 概述 上篇文章介绍了如何添加Model,在这篇文章中,我们将通过控制器访问模型中的数据,还有有写朋友问我,这么简单的东西有必要分享吗?其实有些东西真的很简单,没必要分享,但是这也是我学习的历程,希望记录自己是