在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
本文转自:http://www.cnblogs.com/savorboard/p/aspnetcore-identity3.html 前言在上一篇文章中,我们学习了 CookieAuthentication 中间件,本篇的话主要看一下 Identity 本身。 最早2005年 ASP.NET 2.0 的时候开始, Web 应用程序在处理身份验证和授权有了很多的变化,多了比如手机端,平板等,所以那个时候为了适应这种变化就引入了ASP.NET Membership,但是随着时间的发展一些社交网站或者程序聚集了大量的用户,比如Facebook,Twitter,QQ等,这个时候用户希望能够使用他们在这些社交站点身份来登陆当前网站,这样可以免除注册这些琐碎而又必要的操作,用户也不必记住大量的账户密码。 又随着互联网的发展,越来越多的开发者不只是关注具体业务代码的编写,转变为开始关注应用程序代码的单元测试,这已经是开发者关注的核心。所以在2008年,ASP.NET 团队引入了 MVC 框架,这样来帮助开发者很方便的构建单元测试,同时开发者希望他们的 Membership 系统也能够做到这一点。 基于以上,ASP.NET Identity 应运而生。 Identity 要解决的问题很多开发人员说他们不愿意使用Identity,自己实现要方便的多,OK,那么需求来了?以下就是我针对此次任务给你提出来的需求。 身份系统
能够对用户资料(User Profile)很方便的扩展
持久化
单元测试
角色机制
要支持基于Claims
第三方社交登陆
封装为中间件
NuGet包提供
以上,就是我提出来的需求,如果让你来封装这样一个用户身份认证组件,你会不是想到以上的这些功能点,那针对于这些功能点你又会怎么样来设计呢? 下面来看一下 Identity 怎么样设计的吧。 Getting Started抽丝剥茧,我们先从入口看一下其使用方式。 首先我们打开 Startup.cs 文件,然后添加如下代码:
在 ConfigureServices 中,先是注册了数据库上下文,然后又
看了以上代码后,基本上知道了 Identity 他的设计的一个架构了,通过此结构我们也能够学习到我们自己封装一个中间件的时候,该怎么样来组织我们的代码结构,怎么样的利用 ASP.NET Core 给我们提供的依赖注入来更好的解耦,下面我们来看一下通过以上代码我们能够学到什么东西: 1、 在 2、 3、如果你能理解第2条的话,那么你应该知道为什么会在服务中注册 错误描述信息 那个 4、三大对象,这个是 Identity 的核心了,所以学习 Identity 的话,在看完博客 ASP.NET Core 之 Identity 入门(一,二)之后,学这三个对象就够了。 SignInManager: 主要处理注册登录相关业务逻辑。 UserManager: 处理用户相关添加删除,修改密码,添加删除角色等。 RoleManager:角色相关添加删除更新等。 有些同学可能很好奇,都没有依赖具体的数据库或者是EF,是怎么样做到的增删改查的呢? 这个时候,就需要几个 Store 接口派上用场了。以下是Identity中定义的Store接口:
有了这些接口之后,是不是豁然开朗了,原来 Identity 是通过这种方式实现的持久化机制,依赖抽象接口而不是依赖具体的细节实现,这就是面向对象中的依赖倒置原则呀。 Identity 和 EntityFrameworkIdentity 和 EntityFramework的关系,相信上个章节看懂了之后,就很容易明白了,对的,EF 只是针对于上述 Store 接口的实现,不信你看截图的源码: Identity 打头的那些类文件都是定义的需要持久化的Entity对象,Store结尾的那些就是接口的实现啦。 第三方的 Identity 实现除了 EF 是官方默认提供的持久化库之外,还有一些第三方的库,当然你也可以自己使用 ADO.NET 或者 Drapper 实现。 MangoDb 针对于 Identity 提供的实现: https://github.com/tugberkugurlu/AspNetCore.Identity.MongoDB LinqToDB 针对于 Identity 提供的实现:https://github.com/linq2db/LinqToDB.Identity 总结这篇博文写了蛮久的时间的,一方面是因为在构思怎么样的思路来让大家更好的理解,而不仅仅是使用。因为有太多的文章介绍Identity 的使用方式以及代码了,但是最后大家还是不会用。后来想到如果让别人想要理解你的库也好代码也好,让其知道诞生的背景是很重要的,因为这才是设计的初衷。另一方面是因为Connect() 2016 大会上,.NET Core 发布了 1.1 版本,除了把项目升级到1.1之外,也在学习1.1新的一些东西,以便更好给大家分享。 授人以鱼不如授人以渔, 一篇好的博文确实要花费作者更多的心血和时间。如果你觉得这篇博文对您有帮助,感谢您的【推荐】。 同时,ASP.NET Core 之 Identity 系列也结束了,感谢支持的朋友们。如果你对 .NET Core 感兴趣可以关注我,我会定期在博客分享关于 .NET Core 的学习心得。
ASP.NET Core
identity
前言在上一篇文章中,我们学习了 CookieAuthentication 中间件,本篇的话主要看一下 Identity 本身。 最早2005年 ASP.NET 2.0 的时候开始, Web 应用程序在处理身份验证和授权有了很多的变化,多了比如手机端,平板等,所以那个时候为了适应这种变化就引入了ASP.NET Membership,但是随着时间的发展一些社交网站或者程序聚集了大量的用户,比如Facebook,Twitter,QQ等,这个时候用户希望能够使用他们在这些社交站点身份来登陆当前网站,这样可以免除注册这些琐碎而又必要的操作,用户也不必记住大量的账户密码。 又随着互联网的发展,越来越多的开发者不只是关注具体业务代码的编写,转变为开始关注应用程序代码的单元测试,这已经是开发者关注的核心。所以在2008年,ASP.NET 团队引入了 MVC 框架,这样来帮助开发者很方便的构建单元测试,同时开发者希望他们的 Membership 系统也能够做到这一点。 基于以上,ASP.NET Identity 应运而生。 Identity 要解决的问题很多开发人员说他们不愿意使用Identity,自己实现要方便的多,OK,那么需求来了?以下就是我针对此次任务给你提出来的需求。 身份系统
能够对用户资料(User Profile)很方便的扩展
持久化
单元测试
角色机制
要支持基于Claims
第三方社交登陆
封装为中间件
NuGet包提供
以上,就是我提出来的需求,如果让你来封装这样一个用户身份认证组件,你会不是想到以上的这些功能点,那针对于这些功能点你又会怎么样来设计呢? 下面来看一下 Identity 怎么样设计的吧。 Getting Started抽丝剥茧,我们先从入口看一下其使用方式。 首先我们打开 Startup.cs 文件,然后添加如下代码:
在 ConfigureServices 中,先是注册了数据库上下文,然后又
看了以上代码后,基本上知道了 Identity 他的设计的一个架构了,通过此结构我们也能够学习到我们自己封装一个中间件的时候,该怎么样来组织我们的代码结构,怎么样的利用 ASP.NET Core 给我们提供的依赖注入来更好的解耦,下面我们来看一下通过以上代码我们能够学到什么东西: 1、 在 2、 3、如果你能理解第2条的话,那么你应该知道为什么会在服务中注册 错误描述信息 那个 4、三大对象,这个是 Identity 的核心了,所以学习 Identity 的话,在看完博客 ASP.NET Core 之 Identity 入门(一,二)之后,学这三个对象就够了。 SignInManager: 主要处理注册登录相关业务逻辑。 UserManager: 处理用户相关添加删除,修改密码,添加删除角色等。 RoleManager:角色相关添加删除更新等。 有些同学可能很好奇,都没有依赖具体的数据库或者是EF,是怎么样做到的增删改查的呢? 这个时候,就需要几个 Store 接口派上用场了。以下是Identity中定义的Store接口:
有了这些接口之后,是不是豁然开朗了,原来 Identity 是通过这种方式实现的持久化机制,依赖抽象接口而不是依赖具体的细节实现,这就是面向对象中的依赖倒置原则呀。 Identity 和 EntityFrameworkIdentity 和 EntityFramework的关系,相信上个章节看懂了之后,就很容易明白了,对的,EF 只是针对于上述 Store 接口的实现,不信你看截图的源码: Identity 打头的那些类文件都是定义的需要持久化的Entity对象,Store结尾的那些就是接口的实现啦。 第三方的 Identity 实现除了 EF 是官方默认提供的持久化库之外,还有一些第三方的库,当然你也可以自己使用 ADO.NET 或者 Drapper 实现。 MangoDb 针对于 Identity 提供的实现: https://github.com/tugberkugurlu/AspNetCore.Identity.MongoDB LinqToDB 针对于 Identity 提供的实现:https://github.com/linq2db/LinqToDB.Identity 总结这篇博文写了蛮久的时间的,一方面是因为在构思怎么样的思路来让大家更好的理解,而不仅仅是使用。因为有太多的文章介绍Identity 的使用方式以及代码了,但是最后大家还是不会用。后来想到如果让别人想要理解你的库也好代码也好,让其知道诞生的背景是很重要的,因为这才是设计的初衷。另一方面是因为Connect() 2016 大会上,.NET Core 发布了 1.1 版本,除了把项目升级到1.1之外,也在学习1.1新的一些东西,以便更好给大家分享。 授人以鱼不如授人以渔, 一篇好的博文确实要花费作者更多的心血和时间。如果你觉得这篇博文对您有帮助,感谢您的【推荐】。 同时,ASP.NET Core 之 Identity 系列也结束了,感谢支持的朋友们。如果你对 .NET Core 感兴趣可以关注我,我会定期在博客分享关于 .NET Core 的学习心得。
|
请发表评论