博客
关于我
OAuth2图解
阅读量:186 次
发布时间:2019-02-28

本文共 1506 字,大约阅读时间需要 5 分钟。

OAuth2解决什么问题

OAuth2是一种用于开放系统间授权的协议,旨在解决以下核心问题:

1. 开放系统间的授权

照片拥有者希望在云冲印服务上打印照片,而云冲印服务需要访问云存储服务上的资源。这种场景需要一种安全的方式来允许云冲印服务在拥有者允许的情况下访问其资源。


2. 图例说明

  • 资源拥有者:照片的所有者。
  • 客户应用:如云冲印服务。
  • 受保护资源:照片。

3. 早期的解决方案:用户名密码复制

传统的方法是将云存储服务的用户名和密码直接暴露给云冲印服务。这种做法存在以下问题:

  • 安全性低:云冲印服务会永久保存用户密码,存在被滥用或泄露的风险。
  • 灵活性不足:用户无法限制云冲印服务获取资源的范围和有效期。
  • 依赖密码安全:单纯的密码登录并不能完全保障安全。
  • 影响其他服务:一旦用户更改密码,所有依赖此密码的第三方应用都会失效。
  • 潜在风险:第三方应用被破解时,可能导致用户密码泄露和数据安全问题。

这种方法仅适用于同一公司内部的多个系统,但不适用于不受信的第三方应用。


4. OAuth2的通用开发者密钥

另一种方法是使用预先约定的密钥(Development Key),主要用于合作伙伴或业务部门间的授权。这种方式适用于特定的业务场景,但并未完全解决通用授权的需求。


5. OAuth2的令牌机制

OAuth2通过颁发令牌(Token)来实现安全的资源访问。核心流程包括:

  • 申请令牌:客户应用请求令牌。
  • 颁发令牌:授权服务器审核请求后颁发令牌。
  • 令牌管理:包括令牌的生命周期管理、权限范围的定义以及令牌的吊销机制。

OAuth2简介

OAuth2(RFC 6749)是OAuth授权框架的最新版本,主要目标是标准化资源授权流程。其核心角色包括:

1. OAuth的主要角色

  • 授权服务器(Authorization Server):负责颁发和验证令牌。
  • 资源拥有者(Resource Owner):资源的原始所有者。
  • 客户应用(Client):请求资源的应用程序。
  • 资源服务器(Resource Server):存储和保护资源的服务器。

2. OAuth2的最简向导

OAuth2领域的专家川崎高彦开发了“OAuth2 as Service”服务,并撰写了《OAuth2最简向导》用于向投资人解释 OAuth2 的核心概念。该文章简明扼要地介绍了 OAuth2 的主要特点和应用场景。


OAuth2的应用

1. 微服务安全

在微服务架构下,系统和设备的多样化使得传统的用户名密码登录方式难以适用。OAuth2通过颁发令牌,提供了一种基于 token 的安全登录方式,解决了传统方法在复杂场景下的不足。

2. 社交登录

OAuth2也可以用于社交登录,例如通过微信、QQ等第三方账号登录目标应用。这种方式提升了用户体验,同时降低了账号泄露的风险。


OAuth2.0核心图解

1. OAuth2.0授权框架(RFC 6749)

OAuth2.0的核心流程包括以下几个步骤:

  • 客户应用授权服务器提出资源请求。
  • 授权服务器验证客户应用的身份,并决定是否授予访问权限。
  • 授权服务器向客户应用颁发一个访问令牌(Access Token),用于标识客户应用。
  • 客户应用使用访问令牌向资源服务器请求资源。
  • 资源服务器验证令牌的有效性,并允许访问资源。
  • 令牌的终结:资源服务器验证完成后,会将令牌终结,防止多次使用。
  • 2. 访问令牌的校验

    资源服务器必须具备验证访问令牌的能力,以确保只有合法的客户应用可以访问受保护资源。


    通过以上机制,OAuth2 不仅解决了资源共享的安全性问题,还为现代应用提供了一种灵活且安全的授权方式。

    转载地址:http://reqj.baihongyu.com/

    你可能感兴趣的文章
    Python - 如何解析 xml 响应并将元素值存储在变量中?
    查看>>
    Python - 安装了扩展的远程 Webdriver
    查看>>
    python - 将字符串中的日期与今天的日期进行比较
    查看>>
    python - 数据描述符(class 内置 get/set/delete方法 )
    查看>>
    Python - 根据值绘制彩色网格
    查看>>
    Python - 正则表达式在括号之间获取数字
    查看>>
    python binascii.Error: Incorrect padding
    查看>>
    Python bool() 函数能否为无效参数引发异常?
    查看>>
    Python C 程序子进程在“for line in iter“处挂起
    查看>>
    Python Celery:自动化测试平台定时任务必备的三方库
    查看>>
    python check_output 失败,退出状态为 1,但 Popen 适用于相同的命令
    查看>>
    Python CONNECT 4 CHECK WIN函数
    查看>>
    python ctypes库中动态链接库加载方式
    查看>>
    python cv2 图像( np array )转 HObject
    查看>>
    python cv2截取不规则区域图片
    查看>>
    python CV2裁剪图片并保存
    查看>>
    python cv2读取rtsp实时码流按时生成连续视频文件
    查看>>
    Python Dataframe Groupby Mean和Std
    查看>>
    python datetime
    查看>>
    python datetime笔记
    查看>>