OAuth2协议

1. OAuth2协议简介

1.1 OAuth2 是什么?

OAuth 2.0参考:link

  1. oauth2 是目前最流行的第三方授权机制,,用来授权第三方应用,获取用户信息。

  2. oauth 协议为用户资源提供了安全开放又简易的规范标准。oauth的授权并不会使第三方应用获取到用户账号信息 (比如账户和密码),即第三方无需使用用户的账户密码就可以申请获得用户的资源的授权,因此oauth是开放的安全的。

  3. oauth 协议规范了授权方式,不采用授权账号和密码的方式,而是使用 令牌(Token)来解决授权问题,通过令牌去获取被授权的用户信息,从而避免第三方获取用户账号密码而产生的安全问题。

1.2 OAuth2涉及到的角色

  1. 资源所有者 : 用户,如用户的昵称,头像都存放在了服务提供商的资源服务器上。
  2. 第三方应用 : 客户端, 例如某网站, 通过微信 QQ获取用户信息,这里统称网站为第三方应用。
  3. 认证服务器 : 专门用来对资源所有者的身份进行认证,对要访问的资源进行授权、产生令牌的服务器。想访问资源,需要通过认证服务器由资源所有者授权后才可访问。
  4. 资源服务器 : 存储用户的资源(昵称、头像 )、验证令牌有效性,比如 用户微信中存储了昵称和头像。
  5. 服务提供商 :例如微信 QQ等(包含认证 资源服务器)

1.3 OAuth2认证流程

这里以微信登录为例:

  • 用户
  • 客户端
  • 微信认证服务器
  • 微信资源服务器

步骤:

  1. 用户访问客户端,要求登录才可访问资源,用户选择微信登录,客户端跳转认证服务器
  2. 认证服务器响应授权页面(登录页扫码),要求用户授权
  3. 用户同意授权
  4. 微信认证服务器响应授权码到客户端,(授权码附在客户端事先指定的重定向url 后)
  5. 客户端收到授权码,带上授权码申请令牌
  6. 微信认证服务器收到授权码申请令牌,认证成功响应令牌
  7. 客户端拿着令牌到资源服务器获取用户信息
  8. 资源服务器校验令牌合法性,校验成功,响应用户信息
  9. 客户端收到用户信息,视为登录成功,显示用户信息,响应用户想要访问的资源

1.4 OAuth2 协议的授权模式

客户端证书模式(Client credentials):用得少。当一个第三应用自己本身需要获取资源(而不是以用户的名
义),而不是获取用户的资源时,客户端模式十分有用。
密码模式(Resource Owner Password Credentials):将用户名和密码传过去,直接获取 access_token 。用户
同意授权动作是在第三方应用上完成 ,而不是在认证服务器上。第三方应用申请令牌时,直接带着用户名密码去向
认证服务器申请令牌。这种方式认证服务器无法断定用户是否真的授权了,用户名密码可能是第三方应用盗取来
的。
简化模式(Implicit): 令牌是发放给浏览器的,oauth客户端运行在浏览器中 ,通过JS脚本去申请令牌。而不是发放
给第三方应用的服务器。
授权码模式(Authorization code):功能最完整,流程最严密的授权模式。国内各大服务提供商(微信、QQ、微
博、淘宝 、百度)都采用此模式进行授权。可以确定是用户真正同意授权;而且令牌是认证服务器发放给第三方应
用的服务器,而不是浏览器上。

  • 授权码模式就是 1.2 咱们所说的1-9个步骤。严谨
  • 简化模式
    • 中间少了授权码的发送
    • 用户同意了网站授权,
    • 认证服务器直接将令牌发送给客户端
    • 客户端拿着令牌去取用户资源
  • 密码模式
    • 用户直接向客户端提供认证服务器的账号密码
    • 客户端将账号密码发送给认证服务器请求令牌
  • 客户端模式
    • 客户端需要的资源带上客户端信息去申请令牌
    • 认证服务器确认无误,向客户端提供令牌
    • 客户端通过令牌获取资源服务器资源
    • 资源服务器校验合法性响应资源给客户端

接下来会对Spring Security OAuth2 认证服务器,资源服务器,JWT ,Spring Cloud OAuth2分布式认证授权 进行了解。尽请关注。

你可能感兴趣的:(权限)