一、前言
Oauth(Open Authorization)是一个关于授权的开放网络标准,它允许用户授权第三方应用访问他们存储在其它服务提供者上的身份信息,而不需要将用户名和密码提供给第三方应用。
例如,我们在登录淘宝的时候,可以使用支付宝授权登录,我们不需要在淘宝上输入支付宝的账号密码。现在oauth的使用已经非常广泛了,目前常用的版本是2.0,所以我们经常说oauth2.0。
二、Oauth2的基本概念
Oauth2的作用就是让客户端安全可控的获取用户的授权,与资源服务器进行交互。
1. Oauth2中的几种角色
- 资源所有者(Resource Owner):能够授权访问受保护资源的实体,通常是指用户。
- 客户端(Client):请求访问受保护资源的应用程序,可以是web应用(浏览器)、移动应用或其他第三方应用。
- 授权服务器(Authorization Server):负责验证资源所有者的身份,并颁发访问令牌给客户端。
- 认证服务器(Authication Server):用于验证客户端的身份,通常与授权服务器合并在一起。
- 资源服务器(Resource Server):存储受保护的资源,并根据访问令牌来验证和控制对资源的访问。
这些角色在oauth2的授权流程中扮演着不同的角色和功能,共同实现了授权和访问控制机制。
2. Oauth2中的授权模式
- 授权码模式:客户端通过重定向用户到授权服务器,获取授权码,然后使用授权码换取访问令牌,这也是现在最常用的授权模式。
- 简化模式:客户端直接通过重定向用户到授权服务器,获取访问令牌。
- 密码模式:客户端直接使用用户的账号和密码,通过授权服务器获取访问令牌。
- 客户端模式:客户端使用自己的身份信息,通过授权服务器获取访问令牌。
这些授权模式可以根据不同的应用场景选择使用,以满足不同的安全和授权需求。
三、Oauth2授权第三方应用的流程
我们以浏览器为客户端,keyclock为授权服务器,采用授权码的模式进行授权认证为例。话不多说,先上图,然后再依次解释。
- 用户访问我们应用服务器(资源服务器)的登录页面。
- 资源服务器向授权服务器发起认证请求并重定向到授权服务器。
- 授权服务器给用户返回授权服务器的认证页面。
- 用户输入账号密码,授权登录并获取个人部分信息。
- 授权服务器重定向回资源服务器,并返回授权码。
- 资源服务器拿到授权码,向授权服务器换取访问access_token。
- 授权服务器给资源服务器返回access_token。
- 资源服务器携带access_token向授权服务器请求用户信息。
- 授权服务器对access_token进行校验。
- 授权服务器给资源服务器返回用户信息,用户认证成功。