1.HTTP Basic Auth
每次请求时都童工用户的username,password,是配合RESTful API使用的最简单的认证方式,但是又把用户名密码暴露给第三方客户端的风险。在开发对外开放的RESTful API时,尽量避免采用HTTP Basic Auth
2.Cookie Auth
Cookie认证机制就是为一次请求认证在服务的创建一个Session对象,同时在客户端的浏览器端创建了一个Cookie对象,通过客户端带上来的Cookie对象来与服务器端的session对象匹配来实现状态管理的默认关闭浏览器时,cookie会删除。
问题:有些客户端可能没有cookie,或者客户端访问的多个微服务的可能cookie和session不一致。
3.OAuth
OAuth (开放授权) 是一个开放的授权标准,允许用户让第三方应用访问该用户在某一web服务上存储的私密的资源,而不需将用户名和密码提供给第三方应用。OAuth允许用户提供一个令牌,而不是用户名和密码来访问他们存放在特定服务提供者的数据,每一个令牌授权一个特定的第三方系统在特定的时段内访问特定的资源,OAuth让用户可以授权第三方网站访问他们存储在另外服务提供者的某些特定信息,而非全部内容。
基于OAuth的认证机制适用于个人消费者类的互联网产品,如社交类APP等应用,但是不太适合自有认证权限管理的企业应用。
1.Token Auth
基于token的身份验证方法,在服务端不需要存储用户名的登录记录,大概流程:
- 客户端使用用户名跟密码请求登录
- 服务端收到请求,去验证用户名与密码
- 验证成功后,服务端会签发一个Token,再把这个Token发送给客户端
- 客户端收到token以后可以把他存储起来,比如放在Cookie里
- 客户端每次向服务端请求资源的时候需要带着服务端签发的Token
- 服务端收到请求,然后验证客户端请求里面带着的Token,如果验证成功,就向客户端请求返回的数据。
Token Auth 的优点 - 支持跨域访问,Cookie是不允许跨域访问的,这一点对token机制是不存在的,前提是传输的用户认证信息是通过HTTP头传输。
- 无状态:(服务端可扩展行):Token机制在服务端不需要存储session信息,因为token自身包含了所有登录用户的洗洗脑,只需要在客户端的cookie或本地介质存储状态信息。
- 更适用:CDN,可以童工内容分发我拿过来请求你服务端的所有资料,而你的服务端字需要提供API即可。
- 去耦:不需要绑定到一个特定的身份验证方案,Token可以在任何地方生成,只要在你的API被调用的时候,你可以进行Token生成调用即可。
- 更适用与移动应用
- CSRF:不在一来与Cookie,所以你不需要考虑对CSRF(跨站请求伪造)的防范。
- 性能:一次网络往返时间(通过数据库查询session信息)送比做一次HMACSHA256计算的Token验证和解析要费时的多。
- 不需要为登录页面做特殊处理
- 基于标准化:你的API可以采用标准化的JSON Web Token