需要学习的OAuth2.0

589 阅读3分钟

「这是我参与2022首次更文挑战的第11天,活动详情查看:2022首次更文挑战

OAuth全称是Open Authentication 开放授权,OAuth 1.0已经被废弃了。OAuth 2.0是现在使用最广泛的,本文中的OAuth都是指OAuth 2.0

登录一个网站时通过输入账号密码,然后确认校验成功后可以成功登录系统。当有一个第三方应用想要访问你在某一网站的信息时,你肯定不想把你的账号密码告诉第三方,然后它用你的帐密登录该网站获取你的信息。那么OAuth2.0 就可以发挥作用。OAuth让用户可以授权第三方网站访问他们存储在另外服务提供者的某些特定信息,而非所有内容。

OAuth2.0

OAuth2.0 协议主要用于资源授权。它是一个开放标准,允许用户让第三方应用访问该用户再某一网站上存储的私密的资源,而无需提供账号密码给第三方应用。

重要知识,要说三遍:

  • OAuth2.0 协议 是个资源授权协议。
  • OAuth2.0 协议 是个资源授权协议。
  • OAuth2.0 协议 是个资源授权协议。

授权和认证

认证(Authorization)授权(Authentication)
证明你是你确认用户是否有权限或资源
需要用户提供证明自己身份根据规则确认用户是否有权限通行
发生在授权之前发生在认证之后
例子:学生出示通行证方可进入图书馆例子:进入图书馆后,学生能进入自习室但无法进入未开放区域

OAuth2.0 流程

以下以微信授权的过程为例,微信作为资源拥有者,拥有用户的相关信息,第三方应用通过请求微信开放平台,得到微信的授权(需经用户同意授权)后获取用户信息。

oauthflow.png

步骤:

  1. 用户要访问第三方应用时,第三方应用将发起访问微信开发平台(授权服务器)将会被重定向到微信的授权页面
  2. 用户同意授权时,微信将返回一个授权码 Code
  3. 第三应用得到授权码 Code ,然后请求授权服务器换取 AccessToken
  4. 第三方应用再通过 accesstoken 向资源服务器(可能和授权服务器同一个)访问用户的数据
  5. 得到用户数据后再重定向到第三方应用里

OAuth2.0 授权方式

  • 密码模式

    • 方式:用户拥有账号和密码,用于换取 accessToken ,然后访问资源
    • 场景:调用者是以用户为单位,适合内部系统使用或者内部旧系统升级适配 OAuth,不建议外放使用
  • 授权码模式

    • 方式:客户端请求授权,用户同意授权后,客户端获取 code ,然后换取 token,再获取用户信息
    • 场景:正宗的 oauth2 的授权模式,适合用于授权第三方免密登录第三应用
  • 简化模式

    • 方式:减少 code 环节,直接通过携带 token 请求访问
    • 场景:使用场景是基于浏览器的应用,不支持 refresh token ,不安全所以建议将 accesstoken时效设置短点
  • 客户端模式

    • 方式:客户端拥有 Id 和 Secret,用于换取 accessToken ,然后访问资源
    • 场景:此场景无用户参与适合系统之间的 API 调用,不建议外放使用