OAuth2认证
OAuth 2.0, which stands for “Open Authorization”, is a standard designed to allow a website or application to access resources hosted by other web apps on behalf of a user.
Categories:
OAuth是一个关于授权(authorization)的开放网络标准,在全世界得到广泛应用,目前的版本是2.0版。
为什么需要 OAuth
以网易云音乐云村账号登录为例
传统的用户授权方式是
- 用户输入用户名密码
- 服务器验证密码, 这里需要存储用户密码到本地
- 返回session/token
这对于单一服务没什么问题, 因为用户敏感信息和服务都是由网易云存储并提供的
但是网易云也支持qq登录
按照常识, 用户不会把qq密码提供给网易, 没别的意思, 就是不合逻辑 那么上述流程就存在问题了
- 网易云为了实现qq登录, 不得不保存qq用户信息并部署qq密码登录
- 网易获得了登录用户qq的权限
- qq密码权限范围被意外扩大了, 现在不止腾讯, 网易也可以获取密码了, 被破解的几率增加
所以我们需要在网易和腾讯之间设置一个转换层, 密码在腾讯处理, 通过转换层把令牌交给网易
角色介绍
OAuth 就是这样的一种协议
此协议定义了四种角色
- 客户端/客户, 一个应用程序发出 API 请求对受保护资源执行一些行为,而这些行为是经过资源拥有授权的
- 资源拥有者Resource owner):通常是一个应用的用户,也是资源拥有者,它拥有授予访问在资源 服务器上的资源
- 授权服务器Authorization server):当前授权服务器从资源拥有者达成共识时,它会发放访问令牌 给客户以允许访问在资源服务器上的受保护的资源 。比较小的 API 提供商可能会使用相同的应用和 URL空间作为授权服务器和资源服务器
- 资源服务器Resource server):该服务器是用户拥有资源的服务器,它是受 一般我们叫做 OAuth 保护的服务器。 API 提供商,因为它拥有受保护的数据,比如图片、视频、日历或者合同等。
OAuth 的优点包括简化了用户授权流程,提高了安全性,允许用户选择性地授权资源访问,并支持多 种授权方式(如授权码模式、密码模式、客户端模式等)。它广泛应用于各种互联网应用程序中,例如第 三方登录、 API 访问授权等场景。
实践: Spring Cloud GateWay + 密码模式的 OAuth2 授权模型
警告: 最新的 OAuth 废弃了密码模式鉴权, 此种方法会将密码暴露给客户端
搭建认证服务模块 OAuth2
配置文件
OAuth2 要求使用 JWT 作为令牌格式, 这里需要 RSA 证书
提取公/私钥