OAuth2.0规范简介

OAuth2.0规范简介

花了点时间学习了一下OAuth2.0规范,整理一下备忘~~~~

1、简介

一个简单的例子来说明oauth是什么:

现在很多网站在登录时可以选择使用第三方账号登陆,比如这样:

这里写图片描述

你可以选择一个现有的账号来登了,比如GitHub。然后就会跳转到GitHub的登陆界面,要求你输入账号密码登陆GitHub,像这样:

这里写图片描述

当你登陆GitHub之后,会提示你:之前的网站需要访问你的信息,需要为之授权,像这样:

这里写图片描述

一旦你同意授权之后,就可以自动跳转到博客,并且使用GitHub账号登陆博客。

这是一个典型的OAuth认证授权过程,在这个过程中,涉及到以下角色:

  • 资源所有者:GitHub账号所有者,也就是我
  • 第三方应用:CSDN博客服务
  • 授权服务器:GitHub服务
  • 资源服务器:GitHub服务,这里的授权服务器和资源服务器是同一个,但这并不是必须的
  • 代理客户端:浏览器

整个认证授权过程中,你并没有向CSDN提供你的GitHub密码,而是在GitHub上为CSDN授予访问你在GitHub上的资源(Account、Public data)的访问权限。你可以在所有支持GitHub账号登陆的网站上使用GitHub授权登陆,而这些第三方网站也可以根据你的授权范围访问你在GitHub上的资源。如果某天你不希望这些第三方网站中的一些继续访问你在GitHub上的资源,你可以移除对应的授权,同时不会对其他第三方网站产生影响:

这里写图片描述

2、授权流程

OAuth2.0定义了四种授权许可类型,分别是:授权码、隐式许可、资源所有者密码凭据和客户端凭据。这里仅介绍授权码类型。授权码类型是功能最完整、流程最严密的授权模式,简化流程如下:

这里写图片描述

  • 用户通过浏览器访问互联网网站,比如CSDN
  • 在浏览器输入CSDN地址,打开登陆节点,准备通过GitHub账号登陆
  • CSDN给浏览器返回GitHub授权地址,授权地址参数范围:
    • response_type:必选项,常量 code
    • client_id:必选项,客户端注册时参数的客户端唯一标识符
    • redirect_uri:可选性,授权成功后的跳转地址
    • scope:可选项,授权范围,授权服务器定义的字符串常量,多个值使用空格分隔
    • state:推荐项,用于维护请求和回调之间的状态的不透明的值,可用于防止CSRF攻击
  • 浏览器根据CSDN的响应内容,跳转到GitHub授权地址,完成:登陆、授权、返回
    • 登陆:用户输入凭据登陆GitHub
    • 授权:通常包括资源范围、有效时限等(比如:访问QQ空间、发布状态等)
    • 返回:在上一步的redirect_uri上最佳code和state参数后返回浏览器
    • code:根据用户授权参数到授权码
    • state:上一步的state原样返回
  • 浏览器根据GitHub的响应内容,跳转到CSDN服务端,跳转地址中包括code和state
  • CSDN服务端获取URL中的code,然后CSDN服务端访问GitHub服务端,请求参数范围:
    • grant_type:必选项,常量 authorization_code
    • code:必选项,GitHub返回的code
    • redirect_uri:必选项,必须和之前的redirect_uri完全一致
    • client_id:必选项,通常CSDN会和GitHub协商(注册),GitHub给CSDN一个唯一标识符
    • client_secret:可选项,GitHub以此来验证CSDN的真实性
  • GitHub服务端验证成功后响应CSDN服务端,响应内容包括:
    • access_token:必选项,授权服务器颁发的访问令牌,CSDN凭此访问资源
    • token_type:必选项,指令牌类型,大小写敏感
    • expires_in:推荐项,令牌有效期,单位:秒
    • refresh_token:必选项,access_token过期后从新获取新值时的凭据,access_token的有效期可能比expires_in短
  • CSDN服务端使用access_token向资源服务器(这里还是GitHub)发出资源访问请求
  • 资源服务器验证access_token是否合法(过期、超范围访问等),响应请求
  • CSDN向浏览器响应资源访问成功(这里是使用GitHub账号登陆成功,有可能还会获得用户头像等公开信息)

3、参考资料

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页