什么是Identity Server 4?

IdentityServer是基于OpenID Connect协议标准的身份认证授权程序,它实现了OpenID ConnectOAuth2.0协议。
它是一个中间件服务框架,继承OIDC和OAuth2.0(就是一个身份验证框架)。

它能做什么

  • 保护我们的资源
  • 颁发令牌,验证令牌,刷新令牌
  • 使用本地账户或外部身份身份提供程序对用户进行身份验证(qq,微信等登录方式)
  • 提供会话管理和单点登录
  • 管理和验证客户机
  • 支持非常多的协议实现和可扩展点。

学习中的知识点

常用术语

  • 用户(User)资源拥有者
  • 客户端应用(Client)是一个应用程序,而不是浏览器的那个客户端
  • 受保护的资源(Resource)、
    • 资源服务器的中API。比如张三在博客发布了一篇文章,张三就是用户,通过客户端应用调用。
    • 授权服务器的一些数据。比如张三注册了用户,用户数据等。
  • 访问令牌(Access Token)
    • 类似于你去某些公司,给你一个临时卡。
    • 令牌是短期的,可撤销的,具有一定范围的。
  • 刷新令牌(Refreash Token)
    • 获取access token
    • 可以随时控制访问权限,因为它是新的access token
  • Scope(范围)
    • 在简单的情况下,API只需要一个作用域。但是,在某些情况下,您可能希望细分API功能,并允许不同客户端访问不同的部分。
  • Bearer认证
  • Claims(声明)

    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,比如我们的头像、昵称等其它信息
  • 授权模式

    • 授权码
      • 1.请求授权码
      • 2.返回授权码
      • 3.请求令牌
      • 4.返回令牌
    • 简介模式
      • 1.请求令牌
      • 2.返回令牌
    • 密码模式
    • 凭证模式
      • 没有页面的客户端

        OpenID、OIDC和OAuth的区别

  • 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对象模式

  • 服务和中间件
  • 配置数据和操作数据
  • 自定义扩展用户数据
  • Quickstart UI 快速启动UI

    Ids4优劣点

  • 优点

    • 框架继承了OCID和OAuth2.0
    • 可以做自定义扩展,更方便
    • 搭配ocelot等,更系统
    • 单独登录,注销登录,外部登录等等
  • 劣势
    • 太复杂,不好定制
    • 适合大中型项目,小项目不建议