https://www.yuque.com/yuejiangliu/dotnet/cg95ni


代表资源所有者的凭据

授权 Authorization Grant

授权是一个代表着资源所有者权限的凭据,它可以被客户端应用来获取 Access Token。

OAuth 2.0 里面定义了 4 种类型的授权,分别是:

  1. Auhtorization Code 授权码
  2. Implicit
  3. Resource Owner Password Credentials
  4. Client Credentials

OAuth 2.0 还定义了一个扩展机制以便自定义其它的授权类型。

用一句话描述“授权(Authorization Grant)就是获取 Token 的方法”。

  • Authorization Code
    • 使用授权服务器作为客户端和资源所有者的中介
    • 在授权服务器把资源所有者送回(重定向)到客户端的时候带着这个临时的凭据 Authorization Code。它就代表着资源所有者委托给客户端应用的权限
    • 在安全方面的一些优点:
      • 可以对客户端应用进行身份认证
      • Access Token 直接发送到客户端应用,不经过资源所有者的浏览器,所以不会将其暴露给外界,包括资源所有者
    • 适合 ASP.NET Core MVC 这类服务器端的客户端应用
      • Access Token 直接发送到 Web Server,不经过用户浏览器,不会暴露 Access Token
  • Implicit
    • Authorization Code 的简化版本
    • 针对浏览器内的客户端应用,例如 Angular SPA
    • 没有授权码发回给客户端应用的步骤,授权服务器直接把 Access Token 发回给了客户端应用,所以在浏览器内能获取到 Access Token
    • Implicit 授权确实可以提高浏览器内应用的响应性和效率,毕竟它减少了往返的次数。但是方便可能会带来风险,推荐尽量使用 Authorization Code
  • Resource Owner Password Credentials
    • 直接使用用户的密码作为授权来获得 Access Token
    • 仅当用户和客户端间高度信任且其他授权方式不可用时才可以使用这种授权方式
    • 这种凭据只应用于一次请求并用于交换 Access Token,避免客户端存储用户的凭据(密码)
      • 通过交换一个长期有效的 Access Token 或使用 Refresh Token都可以达到这种效果
  • Client Credentials
    • 受保护资源并不属于任意一个用户(没有用户对该资源负责),但客户端任需访问受保护资源
  • Device Code
  • Refresh Token
    • 通常能从授权服务器获得两个令牌:Access Token 和 Refresh Token
    • 当 Access Token 要过期时,我们使用 Refresh Token 再获取一个 Access Token

最新文章

  1. 学会用bootstrap的modal和carousel
  2. python_接口开发
  3. Xen之初体验:XenMotion、 StorageMotion、Site Recovery、Power Management 各种新、高级功能免费
  4. 测试post接口curl
  5. 利用QJSON将FDQuery转成JSON串
  6. redis如何执行redis命令
  7. python解析RSS(feedparser)
  8. MySQL性能优化的21个最佳实践 和 mysql使用索引
  9. Nodejs简单验证码ccap安装
  10. iOS实践01
  11. js事件绑定函数
  12. 使用 connect http proxy 绕过 ssh 防火墙限制
  13. PJSUA2开发文档--第十章 媒体质量(MEDIA QUALITY)
  14. Python——OS模块
  15. Java — CommonUtil
  16. VBA 生成XML(转)
  17. iOS:使用NSRegularExpression正则去掉一串字符串中所有的特殊字符和标点
  18. Java基础语法<八> 继承 多态 抽象 反射
  19. 【IP代理】国内省市域名代理
  20. mysql中使用行号

热门文章

  1. 小贝_mysql主从复制作用以及案例
  2. RabbitMQ的工作模式
  3. nice命令兼容性分析实例
  4. iOS移动开发周报-第18期
  5. Canvas学习笔记——拖曳与投掷物体
  6. 转_Greenplum 数据库安装部署(生产环境)
  7. ffmpeg下载rtmp flv
  8. .Net 中的反射(动态创建类型实例)
  9. LeetCode(70)题解: climbing-stairs
  10. 按照eslint 规范写代码 [eslint] 'flag' is assigned to itself. (no-self-assign)