OAuth 2.0协议概念:
OAuth 是 Open Authorization 的简写。OAuth 协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式不同之处是 OAuth 的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权,因此 OAuth 是安全的。OAuth 2.0(开放授权)是一个认证框架,它允许应用程序访问您在其他应用程序上存储的个人信息,而无需共享您的密码。它是一种安全、简单、灵活的解决方案,已成为许多网站和服务使用身份验证和授权的开放标准。
OAuth2 协议主要角色:
- 资源所有者 (Resource Owner):资源所有者是指拥有受保护资源的用户,即数据或服务的真正拥有者。资源所有者通过授权将访问权限委派给客户端。
- 客户端 (Client):客户端是指请求访问受保护资源的应用程序、网站或设备。它可以是第三方应用、移动应用、桌面应用等。
- 授权服务器 (Authorization Server):也称为认证服务器,授权服务器负责认证资源所有者,并颁发访问令牌给客户端。它验证客户端的身份和授权请求,并提供资源所有者进行授权的界面。
- 资源服务器 (Resource Server):资源服务器存储和管理受保护的资源。它接收来自客户端的访问请求,并根据访问令牌的有效性来判断是否授权访问资源。
- 授权许可 (Authorization Grant):授权许可是资源所有者授权给客户端访问受保护资源的凭证。OAuth2定义了多种授权许可类型,如授权码、简化授权、密码授权和客户端凭证等。
- 访问令牌 (Access Token):访问令牌是由授权服务器颁发给客户端的凭证,表示客户端被授权访问受保护资源的权限。客户端使用访问令牌来请求资源服务器获取受保护资源。
- 刷新令牌 (Refresh Token):刷新令牌是可选的,用于在访问令牌过期后获取新的访问令牌。客户端可以使用刷新令牌向授权服务器请求刷新访问令牌,以延长访问权限的有效期。
OAuth 2.0实现统一认证流程
假如我们是一个前后端分离的项目
前端地址:192.168.0.1
后端地址192.168.0.2
统一认证地址192.168.0.3
在我们这个前后端分离的项目中具体流程如下:
1.用户在客户端(浏览器)输入想要访问的资源URL,比如192.168.0.1:8080/page
2.因为没有任何授权,前端就会将请求重定向到统一认证的地址上,并拼接上redirectUri和appId,secrit等字段
http://192.168.0.3:9000/onecity-bc-login/?returnUrl=/onecity/bc/boss/oauth2.0/authorize?redirectUri=http:192.68.0.1:8080/login&appId=xasf_yw_wy
3.用户在统一认证的地址上输入账号密码,通过认证后,认证服务器生成code,然后统一认证服务就会重定向到上面路径的redurectUri—192.68.0.1:8080/login路径并拼接刚刚生成的code
http://192.168.0.1:8080/login?code=33635289265
4.此时我们的前端服务已经获取到了code,前端服务拿这个code请求后端服务的getToken接口,后端的gettoken接口收到code后会调用方法请求统一认证的getToken服务接口,token认证成功后,此时后端会把token存储起来,并把token作为前端的请求的response给前端
5.此时前端服务已经接收到了token,前端token会将token保存起来,并保存在浏览器的cookie中。之后前端加载用户首次输入的访问地址,完成资源加载。
6.在首次认证完成后,token时效内,我们每次访问资源都会携带token完成资源加载。