ASP.NET没有魔法——ASP.NET Identity 的“多重”身份验证 (5)

  2. 由于请求中携带了由微软(此处以微软为例)身份验证后的信息,所以会被特定身份验证中间件的Invoke方法处理,其处理过程是先调用了对应的身份验证方法获得身份信息,将验证后的身份信息添加默认的身份验证类型(注:该默认类型就是ExternalCookie,其目的是为了将所有通过第三方身份验证的账户统一处理),最后将身份信息通过SignIn方法写到上下文中,并返回True(注:上面提到过,当身份验证处理器的Invoke方法返回true时后续的内容将不会被调用)

  3. 在从微软身份验证处理中间件的返回过程中,由于上下文中的用户信息的身份验证模式是ExternalCookie,所以会被ExternalCookie这个中间件的ApplyResponseGrantAsync方法处理,将当前的身份信息序列化并加密后保存到名为.AspNet.ExternalCookie的cookie中,然后重定向到AcountController的ExternalLoginCallback。

  4. ExternalLoginCallback方法实际才是ASP.NET中真正用来身份验证的步骤,前面仅仅是通过第三方获得验证后的用户名等信息,然后将该用户的信息以cookie的形式保存到ExternalCookie中,而这里首先就是通过AuthenticationManager调用了ExternalCookie中间件的身份验证方法,获得Cookie中保存的用户信息,然后通过这个用户信息去本地数据库中查询,如果用户存在,那么登录成功,否则跳转到ExternalLoginConfirmation页面去补充用户信息(相当于根据第三方用户名完成注册)后登录,登录成功后用户信息会被积极模式的Cookie身份验证中间件保存到.AspNet.ApplicationCookie中。(注:这里的登录过程可参考普通验证的登录过程)。

  以上就是三种身份验证的执行流程,虽然它们流程不同,但最后目的是一致的,在每一种身份验证流程最后都是通过SignInManager的SignIn方法完成的登录,即无论什么方式登录的,最终都会将身份信息以Cookie的形式保存在名为.AspNet.ApplicationCookie的Cookie中。并且该方法会将双因子验证以及外部Cookie验证的信息都清除:

  

ASP.NET没有魔法——ASP.NET Identity 的“多重”身份验证

  另外双因子验证作为一种附加的验证方式,它既可以附加到普通验证方式上也可以附加到第三方验证方式上。

小结

  本章是对Owin的身份验证机制以及ASP.NET MVC基于Identity的身份验证解决方案进行了介绍,ASP.NET MVC使用Identity基于Owin提供的三种验证方式已经能够满足日常的开发需求,对这些流程的理解能够更好的根据需求来完善自己项目中的身份验证功能,在下一篇文章中将以代码的形式在My Blog中添加双因子验证以及第三方账户验证。

PS:个人觉得这些流程还是比较复杂,本章内容也只是对大体的流程进行了介绍,在实际代码中还对身份验证中可能出现的其它情况进行了处理,有兴趣可通过反编译的方式查看相应类型的源码。另外感谢大家对我的支持,如有问题尽管提出,大家共同进步。(*^_^*)

参考

  
  https://www.cnblogs.com/XiongMaoMengNan/p/6785155.html
  https://stackoverflow.com/questions/26166826/usecookieauthentication-vs-useexternalsignincookie
  https://docs.microsoft.com/en-us/aspnet/web-api/overview/security/external-authentication-services
  https://www.benday.com/2014/02/25/walkthrough-asp-net-mvc-identity-with-microsoft-account-authentication/

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpzsyf.html