OAuth2是一种授权机制,简单来说就是让第三方应用程序,必须小程序、H5、APP等应用在不获取用户账号和密码的情况下,安全的使用用户在另一个平台比如微信、支付宝、微博等平台用户的部分权限,常用的比如小程序使用微信的头像等。
下面来说为什么需要OAuth2机制?
假设你使用一个开放的小程序,但是你不想注册账号,于是选择使用微信登录。这时面临几个典型的问题:
- 小程序不能直接索要你的微信账号和密码,因为涉及安全问题
- 微信也不可以将你的信息随便给到小程序,因为这涉及到隐私问题
- 那么此时,OAuth2就是两者之间的安全桥梁
OAuth2一共有4个关键的角色:
- 资源所有者:用户(比如要登录的用户)
- 客户端:第三方应用,就是上面说的小程序
- 授权服务器:提供登录的平台,比如微信的授权服务器
- 资源服务器:存储用户数据的平台,比如微信的服务器、存储你个人的账户信息
接下来是OAuth2的授权流程,以微信登录小程序为例
步骤 1:用户触发授权,就是你点击使用微信登录
小程序会跳转到微信的授权页面,提示:小程序请求获取你的头像和昵称,是否允许?
步骤 2:用户点击允许同意授权
微信的授权服务器会生成一个授权码(code),并跳回要登录的小程序并附带生成的授权码。
这个 授权码code 相当于“短期通行证”,有效期很短(比如 10 分钟)。
步骤 3:客户端获取访问令牌 小程序使用code换取权限
小程序拿到 code 后,会向微信的授权服务器发送请求:
带上自己的身份(客户端 ID 和密钥,提前在微信开放平台注册过)带上刚刚拿到的 code
微信验证通过后,会返回一个访问令牌(access_token),相当于“长期通行证”。
步骤 4:客户端访问资源 小程序获取你的信息
小程序用 access_token 向微信的资源服务器请求:请给我这个用户的头像和昵称。
微信验证 token 有效后,返回你的信息,小程序完成登录。
具体流程图如下:
为什么 OAuth2 安全?
第三方应用永远拿不到用户密码
授权范围在可控范围内,针对敏感信息可不予授权(比如只允许获取头像,不允许转账)
access_token 可以随时被用户吊销(比如在微信「设置 - 隐私」中取消授权)
通过这个流程,既保证了用户信息的安全,又实现了便捷的跨平台登录,这就是 OAuth2 的核心价值。