什么是Identity Server 4?
IdentityServer是基于OpenID Connect协议标准的身份认证和授权程序,它实现了OpenID Connect和OAuth2.0协议。
它是一个中间件服务框架,继承OIDC和OAuth2.0(就是一个身份验证框架)。
它能做什么
- 保护我们的资源
- 颁发令牌,验证令牌,刷新令牌
- 使用本地账户或外部身份身份提供程序对用户进行身份验证(qq,微信等登录方式)
- 提供会话管理和单点登录
- 管理和验证客户机
- 支持非常多的协议实现和可扩展点。
学习中的知识点
常用术语
- 用户(User)资源拥有者
- 客户端应用(Client)是一个应用程序,而不是浏览器的那个客户端
- 受保护的资源(Resource)、
- 资源服务器的中API。比如张三在博客发布了一篇文章,张三就是用户,通过客户端应用调用。
- 授权服务器的一些数据。比如张三注册了用户,用户数据等。
- 访问令牌(Access Token)
- 类似于你去某些公司,给你一个临时卡。
- 令牌是短期的,可撤销的,具有一定范围的。
- 刷新令牌(Refreash Token)
- 获取access token
- 可以随时控制访问权限,因为它是新的access token
- Scope(范围)
- 在简单的情况下,API只需要一个作用域。但是,在某些情况下,您可能希望细分API功能,并允许不同客户端访问不同的部分。
- Bearer认证
-
JWT与OAuth2.0
JWT是一种具体的,自身包含特定声明逻辑的Token实现框架,全靠令牌去验证的。
- 包含头信息,载荷等等
OAuth2.0是一种授权协议,是规范,不是实现。比如QQ授权机制
OAuth2.0简介
是一种关于【授权】的协议
- 只能做授权,不能做认证。(不管你账号密码正确与否,只管授权。允许用户让第三方来访问某一个网站的资源,而不会泄露用户名密码给第三方,是代表不是假冒。比如登录博客园你不想注册账号,你使用QQ第三方登录,你同意博客园访问你QQ上的一些资源来进行登录)
- 被同意授权后,发放Access Token
- 然后根据Access Token获取资源
- 场景:简述的QQ注册与登录
- 资源拥有者(Resource Owner)这里是Tom
- 客户端应用(Client)这里是某一App
- 授权服务器(Authorization Server)这里还是QQ,因为QQ有相关数据。
- 资源服务器(Resource Server)这里是QQ,比如我们的头像、昵称等其它信息
授权模式
OpenID是认证,OAth2.0是授权
- Authenrication
- Authorization
- OpenID更简单,只提供一个认证,和字符串去中心化的登录认证,只需要识别URL和OpenID即可。
- 登录外包给了第三方,登录的时候输入用户名,会跳转到对应的网站,输入密码然后返回到App。
- OAuth是OpenID的一个补充,但是完全不同的服务。完全不需要提供任何信息给第三方,包括用户名。
- 因为上面还得需要输入用户名。
OpenID Connect兼容OAth2.0+OpenID
常见的几种Ids4模式
客户端授权模式(Client Credentials,WPF调用)
- 密码授权模式(Resource Owner Password Credentials)
- 授权码授权模式(Authorization Code Flow,MVC调用)
- 简化授权模式-OpenID(Implicit Flow,JS/Vue客户端调用)
- 混合模式-OpenID&OAuth(Hybrid Flow,角色+策略授权)
集成ASP.NET Core Identity and EntiryFramework Core
框架包含的内容
核心的IdentityServer对象模式
- 服务和中间件
- 配置数据和操作数据
- 自定义扩展用户数据
-
Ids4优劣点
优点
- 框架继承了OCID和OAuth2.0
- 可以做自定义扩展,更方便
- 搭配ocelot等,更系统
- 单独登录,注销登录,外部登录等等
- 劣势
- 太复杂,不好定制
- 适合大中型项目,小项目不建议