博客
关于我
资源授权?对OAuth2.0的一次重新认识的过程
阅读量:418 次
发布时间:2019-03-06

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

OAuth2授权机制解析:以QQ登录博客园为例

OAuth2作为一种开放标准,为第三方应用获取用户资源提供了一种安全的授权方式。它通过分发令牌(Token),让第三方应用在不直接获取用户敏感信息的情况下,访问用户在其他网站上的资源。以下将从基本概念到授权流程,再到具体模式的实现细节,详细解读OAuth2的工作原理。

OAuth2基本概念

OAuth2的主要目标是简化客户端(第三方应用)的开发流程,同时为不同类型的应用提供标准化的授权方式。它通过四个角色协同工作:

  • 资源所有者(Resource Owner):资源的拥有者,如小明。
  • 资源服务器(Resource Server):资源所在的服务器,如QQ应用。
  • 授权服务器(Authorization Server):用于验证客户端身份并颁发令牌的服务器。
  • 第三方应用(Client):请求访问受保护资源的应用,如博客园。
  • OAuth2标准授权流程

    以QQ登录博客园为例,OAuth2的授权流程可以分为以下几个步骤:

  • QQ授权验证:小明登录QQ账号并同意博客园的授权请求。
  • 授权许可凭证获取:QQ返回授权许可凭证(Authorization Code),如12345678。
  • 令牌获取:博客园使用授权许可凭证向授权服务器请求令牌(Token),如access_token和refresh_token。
  • 资源访问:博客园凭借令牌获取QQ用户的资源,如昵称和头像。
  • OAuth2授权模式

    OAuth2提供了多种授权模式,主要用于不同场景的客户端:

    1. 授权码模式(Authorization Code)

    • 特点:授权码模式是最常用的模式,适用于需要后端处理的客户端。

    • 流程:

    • 客户端(博客园)发起授权请求,携带client_id、redirect_uri、scope等参数。
    • 授权服务器(QQ)验证请求,返回授权码。
    • 客户端将授权码发送后端,后端向授权服务器获取令牌。
    • 客户端使用令牌访问资源。
    • 参数说明:

      • client_id:客户端唯一标识ID。
      • redirect_uri:授权成功后的重定向地址。
      • state:防止CSRF攻击的状态码。
      • scope:授权范围,如get_user_info。

    2. 隐式授权模式(Implicit)

    • 特点:适用于无后端的客户端,直接获取令牌。

    • 流程:

    • 客户端发起授权请求,携带client_id、redirect_uri、response_type=token等参数。
    • 授权服务器返回令牌(access_token、token_type、expires_in)。
    • 客户端直接使用令牌访问资源。
    • 优势:简化了授权流程,适合移动应用等场景。

    3. 用户密码模式(Resource Owner Password Credentials)

    • 特点:客户端通过用户名和密码获取令牌,适用于信任的本机应用。

    • 流程:

    • 客户端向授权服务器提交grant_type=password,并提供username和password。
    • 授权服务器验证后返回令牌。
    • 客户端使用令牌访问资源。
    • 注意事项:严格控制权限,确保仅限本机应用使用。

    4. 客户端模式(Client Credentials)

    • 特点:客户端作为资源所有者,直接获取令牌。

    • 流程:

    • 客户端向授权服务器提交grant_type=client_credentials,并提供client_id和client_secret。
    • 授权服务器验证后返回令牌。
    • 客户端使用令牌访问资源。
    • 应用场景:如房地产平台的客户端应用获取用户数据。

    刷新令牌(Refresh Token)

    当令牌过期时,客户端可以使用刷新令牌(refresh_token)重新获取新的令牌。以下是具体流程:

  • 客户端向授权服务器提交grant_type=refresh_token及refresh_token。
  • 授权服务器验证后返回新的令牌。
  • 客户端更新现有令牌。
  • OAuth2在博客园登录案例

    以QQ登录博客园为例,完整流程如下:

  • QQ登录页面:小明登录QQ账号并同意博客园授权。
  • 授权许可凭证:QQ返回授权码12345678。
  • 后端处理:博客园前端将授权码发送后端,后端向授权服务器请求令牌。
  • 令牌获取:授权服务器返回access_token和refresh_token。
  • 资源访问:博客园使用令牌获取QQ用户资源,如昵称和头像。
  • 总结

    OAuth2通过标准化的授权流程,为第三方应用程序提供了一种安全的资源访问方式。无论是授权码模式、隐式授权模式,还是用户密码模式,核心目标都是在不泄露用户敏感信息的情况下,实现资源共享。理解OAuth2授权机制,有助于开发者更好地构建安全、高效的应用程序。

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

    你可能感兴趣的文章
    Python基础_列表 list
    查看>>
    python系列【仅供参考】:python异步库调用gevent和asyncio对比
    查看>>
    python基础3
    查看>>
    Python基础08 面向对象的基本概念
    查看>>
    Python基础-函数篇
    查看>>
    python基础---->常用模块
    查看>>
    Python基础(2):控制结构
    查看>>
    Python基础 | 关于“循环”那些事
    查看>>
    python系列【仅供参考】:python之subprocess模块rsync拉取文件
    查看>>
    python系列【仅供参考】:python 远程rdp
    查看>>
    python基础
    查看>>
    Python基本语法与变量类型
    查看>>
    python基本数据类型(容器)- tuple list dict set
    查看>>
    python基本工资的调整方案_Python薪资又涨了!这可咋办!
    查看>>
    Python基准测试和性能分析内存管理和垃圾回收
    查看>>
    Python基于RESTful风格的接口自动化测试实战
    查看>>
    python基于flask搭建http服务(四)—— Docker容器化部署
    查看>>
    python基于flask搭建http服务(二)—— 实现Excel上传、数据清洗、入库
    查看>>
    python基于flask搭建http服务(三)—— 使用gunicorn部署项目
    查看>>
    python基于flask搭建http服务(一)—— 实现数据查询和Excel导出
    查看>>