zoukankan      html  css  js  c++  java
  • OAuth2的基本概念的理解

    书籍推荐

    OAuth2 in Action -- 原理

    OAuth2 Cookbook -- 实践

    OAuth2 解决的问题域
    1. 开放系统间授权
    • 社交联合登录
    • 开放API平台
    1. 现代微服务安全
    • 单页浏览器App(HTML5/JS/无状态)
    • 无线原生App
    • 服务器端WebApp
    • 微服务和API间调用
    1. 企业内部应用认证授权(IAM/SSO)

    OAuth2的原理

    OAuth2的最简向导可以很清楚的说明.简单明了(地址在https://github.com/MissWangLove/Micro-Service中的pdf下面).

    应用请求资源服务器,访问客户数据,在没有OAuth2的情况下,资源服务器区分不出请求过来的应用是恶意用户还是其他用户,数据都会返回. 有了OAuth2之后,使用授权服务器颁发给客户应用Access Token, 资源服务器拿到Access Token进行校验,验证通过之后才返回数据.

    整体的流程就是:
    客户应用向授权服务器请求Sccess Token ---> 授权服务器向用户征询意见,是否将权限授予客户应用 ---> 用户同意 ---> 授权服务器生成颁发Access Token给客户应用 ---> 客户应用请求资源服务器 ---> 资源服务器验证客户应用的Access Token ---> 验证通过,返回数据.

    涉及到三个角色:

    • 客户应用(请求资源方)
    • 授权服务器(生成Access Token并颁发Access Token)
    • 资源服务器(验证Access Token,返回资源)

    OAuth2的定义

    什么是Oauth2
    1. OAuth2是用于REST/APIs的代理授权框架(delegated authorization framework)
    2. 是基于令牌Token的授权,在无需暴露用户密码的情况下,是应用能获取对用户数据有限访问权限
    3. 解耦认证和授权
    4. 标准安全框架,支持多种用例场景
    • 服务器端WebApp
    • 浏览器单页SAP
    • 无线/原生App
    • 服务器对服务器之间
    令牌类比仆从钥匙(Valet Key)

    也就是给应用有限的访问权限,让应用能够代表用户去访问用户的数据.

    举个简单例子,让别人去你家取东西,将钥匙给他,东西在大厅,他仅仅能进入大厅,卧室的门和其他柜子的钥匙并没有给他,也就没有权限进行访问.

    所以说关键点在于有限的访问权限,这个很重要.

    OAuth2的优点和缺点

    优点:

    • OAuth2.0比1.0更容易实现
    • 更安全,客户端不接触用户密码,服务器端更易于集中保护
    • 广泛传播并被持续使用
    • 短寿命和封装的token
    • 资源服务器和授权服务器解耦
    • 集中式授权,简化客户端
    • HTTP/JSON友好,易于请求和传递token
    • 考虑多种客户端架构场景
    • 客户可以具有有不同的信任级别

    缺点:

    • 协议框架太宽泛,造成各种实现的兼容性和相互操作性差
    • 和OAuth1.0不兼容
    • OAuth2.0不是一个认证协议(是授权协议),OAuth2.0本身并不能告诉你任何用户信息.
    OAuth2.0主要角色
    • 资源拥有着(RO): 资源的拥有人,想要分享某些资源给第三方应用
    • 客户应用: 通常是一个Web或者无线应用,需要访问用户的受保护资源
    • 资源服务器: Web站点或者Web service API,用户的受保护数据存在此处
    • 授权服务器:客户应用成功认证并获得授权之后,向客户应用颁发访问令牌Access Token
    OAuth术语
    • 客户凭证: 客户的clientId和密码用于认证客户
    • 令牌: 授权服务器在接收到客户请求后,颁发的访问令牌
    • 作用域: 客户请求访问令牌时,由资源拥有者额外指定的细分权限(permission)
    OAuth2的令牌类型
    • 授权码(Authorization Code Token): 仅用于授权码授权类型,用于交换获取访问令牌和刷新令牌
    • 刷新令牌(Refresh Token): 用于去授权服务器获取一个新的访问令牌
    • 访问令牌(Access Token): 用于去代表一个用户或服务直接去访问受保护的资源.
    • Bearer Token: 不管谁拿到Token,都可以访问资源,像现钞
    • Proof of Possession(PoP Token): 可以校验client是否对Token有名确的拥有权

    访问令牌是最重要的.

    OAuth2.0误解
    • OAuth并没有支持HTTP以外的协议
    • OAuth并不是一个认证协议
    • OAuth并没有定义授权处理机制
    • OAuth并没有定义token格式
    • OAuth2.0并没有定义加密算法
    • OAuth2.0并不是单个协议
    • OAuth2.0仅是授权框架,仅用于授权处理

    OAuth的本质就是如何获取token和如何使用token.
    OAuth是一种在系统间的代理授权协议(delegation authorization)
    OAuth提供一个宽泛的协议框架,具体安全场景需要定制
    OAuth使用代理协议的方式解决密码共享反模式问题

    OAuth2.0的典型模型

    授权码模式

    授权码模式

    简化模式(适用于单页应用)

    简化模式

    密码模式

    密码模式

    客户端模式

    客户端模式

    刷新令牌如何简化令牌的获取

    刷新令牌

    模式选型

    授权流程渠道(channels)

    channels

    客户应用类型

    oauth client

    四中OAuth2.0授权类型(Flows)

    flows

    授权类型选择 ~ 流程

    select

    OAuth的极简pdf: https://github.com/MissWangLove/Micro-Service/tree/master/pdf

  • 相关阅读:
    JS LeetCode 1423. 可获得的最大点数简单题解
    SpringBoot 学集 (第六章) Docker
    Linux 学记 (第三章)
    Linux 学记 (第二章)
    Linux 学记 (第一章)
    SpringBoot 学集 (第五章) Web开发续
    SpringBoot 学集 (第四章)Web开发
    SpringBoot 学集 (第三章) 日志框架
    SpringBoot 学集 (第二章) 配置文件
    SpringBoot 学集 (第一章)
  • 原文地址:https://www.cnblogs.com/wadmwz/p/10318656.html
Copyright © 2011-2022 走看看