目前大部分软件系统资源访问都是使用HTTP协议,HTTP是无状态的协议,每次请求默认都是相互独立的。但是大部分情况下我们需要记录请求资源的用户信息,也就是保存会话,从而对资源的访问做限制,这是我们认证功能。常用的认证方式有:1、HTTPBasicAuth2、cookieAuth3、
HTTPBasicAuth
这个最古老的认证方式:登录之后会在客户端本地记录用户名和密码,每次请求资源都要带上用户名密码,后端服务收到之后对用户名和密码进行验证,验证通过之后就可以返回资源。这种方式现在基本人用了,弊端很明显,有把用户名密码暴露给第三方客户端的风险,很不安全。尤其是对外提供接口的情况更不能使用。
cookieAuth
Cookie认证机制就是为一次请求认证在服务端创建一个Session对象,同时在客户端的浏览器端创建了一个Cookie对象;通过客户端带上来Cookie对象来与服务器端的session对象匹配来实现状态管理的。默认的,当我们关闭浏览器的时候,cookie会被删除。但可以通过修改cookie的expiretime使cookie在一定时间内有效。cookie不支持跨域,所以不支持跨域的情况。session保存的用户信息会保存在服务器,如果用户量很大,会消耗很大的服务器资源。
TokenAuth
使用token认证是目前主流的认证方式。原理是用户登录时服务端生成一串带有用户信息的JSON串,然后通过加密和编码,生成一个无规则的字符串,这个字符串就是token,客户端保存好token,每次请求都带着这个token,可以放在http的header也可以以参数的形式传递,客户端拿到之后通过解码解密找出用户,验证通过之后就可以返回资源给客户端。
相比于传统的cookie认证方式,这中认证有很多优势。可以支持跨域,跨平台(安卓IOSWEB),由于不用在服务端保存用户信息,可以减轻服务器的压力,性能要高。针对token认证方式有一套标准JWT(JSONWebToken),目前很多语言(.NET,Ruby,Java,Python,PHP)都支持这套标准,开发起来很方便。
OAuth认证
目前使用OAuth2最典型的使用场景是微信登录认证
1第一步:用户同意授权,获取code
2第二步:通过code换取网页授权access_token
3第三步:刷新access_token
4第四步:拉取用户信息(需scope为snsapi_userinfo)
其实大部分第三方授权登录都是使用的这种认证方式QQ认证、新浪微博授权登录、支付宝授权登录等等。
版权声明:本站所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流,不声明或保证其内容的正确性,如发现本站有涉嫌抄袭侵权/违法违规的内容。请举报,一经查实,本站将立刻删除。