一、认证机制的对比
1. HTTP Basic Auth
HTTP Basic Auth 是一种最经典的传统登陆方式,就是每次请求API时都 带上用户的username和 password去认证,但是但由于有把用户名密码暴露给第三方客户端的风险,在生产环境下被 使用的越来越少。因此,在开发对外开放的RESTful API时,尽量避免采用HTTP Basic Auth ,如图:
优点: 简单便捷; 缺点: 不安全容易泄露
2. Cookie Auth
使用Cookie 来进行登陆,这是一种有状态登陆方式,客户端登陆之后,服务器端需要存储对应的Session信息,而客户端会拥有一个Cookie信息。下次登陆时,就是带上Cookie信息与session对象匹配来实现状态管理的。Cookie可以设置过期时间。
优点:相比与传统的登陆方式,更加安全
缺点:在服务器端的Session是状态的,当用户越来越多时,服务端的开销就会越来越大;多个资源请求时存在跨域问题。
3.Token Auth
使用token进行认证登陆,上面讲的Cookie Auth 认证,是有状态的,而token登陆是无状态的,服务端不用存储用户的登陆信息。他是一种令牌登陆方式,当用户第一次登陆后,服务端就会给用户派发一个令牌(token),当用户下次就可以带上这个令牌访问服务端了,
现在流行的 JWT就是一种无状态的token登陆方式
JSON Web Token(JWT)是一个非常轻巧的规范。这个规范允许我们使用JWT在用 户和服务器之间传递安全可靠的信息。
一个JWT实际上就是一个字符串,它由三部分组成,头部、载荷与签名。
- 头部(Header)JWT的最基本的信息,例如其类型以及签名所用的算法等
- 载荷(playload) 包含标准中注册的声明、公共的声明 、私有的声明
- 签证(signature) 是 为加密(base64(Header)+ base64(playload) + 盐)
4. OAuth
OAuth2是一种授权方法,用于通过HTTP协议提供对受保护资源的访问。首先,OAuth2使第三方应用程序能够获得对HTTP服务的有限访问权限,然后通过资源所有者和HTTP服务之间的批准交互来让第三方应用程序代表资源所有者获取访问权限。OAuth 主要用来授权给第三方应用。
JWT与OAuth的区别 -OAuth2是一种授权框架 ,JWT是一种认证协议