HTTP 服务的 4 种认证方法分析
4 种认证方法
Basic
Digest
OAuth
Bearer
其中 OAuth、Bearer 是在企业级认证系统中常用的方案,所以这里重点介绍这 2 种
OAuth
OAuth(开放授权)是一个开放的授权标准 RFC7519,允许用户让第三方应用访问该用户在某一 Web 服务上存储的私密资源(例如照片、视频、音频等),而无需将用户名和密码提供给第三方应用。
最新的版本是 OAuth 2.0,可以参考阮一峰写的 理解OAuth 2.0
Bearer
Bearer 认证,也称为令牌认证,是一种 HTTP 身份验证方法,最流行的 token 编码方式是 JSON Web Token(JWT)
基于 JWT 的 Token 认证机制
什么是 JWT?
JWT 是 Bearer Token 的一个具体实现,由 JSON 数据格式组成,通过 HASH 散列算法生成一个字符串。该字符串可以用来进行授权和信息交换。
原理
1)客户端使用用户名和密码请求登录
2)服务端收到请求后,会去验证用户名和密码。如果用户名和密码跟数据库记录不一致,则验证失败;如果一致则验证通过,服务端会签发一个 Token 返回给客户端
3)客户端收到请求后会将 Token 缓存起来,比如放在浏览器 Cookie 中或者 LocalStorage 中,之后每次请求都会携带该 Token。
4)服务端收到请求后,会验证请求中的 Token,验证通过则进行业务逻辑处理,处理完后返回处理后的结果。
JWT 格式
分为 Header(头部)、Payload(载荷)、Signature(签名)3 个部分
Header
JWT 的头部承载两个信息:
声明类型,这里是 JWT
声明加密的算法
一个典型示例如下
Payload(载荷)
载荷就是存放有效信息的地方。定义细节如下:
1)JWT 标准中注册的声明(可选)
2)公共的声明
可以添加任何的需要的信息,一般添加用户的相关信息或其他业务需要的信息,注意不要添加敏感信息
3)私有的声明
客户端和服务端所共同定义的声明,因为 base64 是对称解密的,所以一般不建议存放敏感信息。
一个典型示例如下
Signature(签名)
原理如下
1)将 Header 和 Payload 分别 base64 编码后,用 . 连接。
2)使用 Header 中声明的加密方式,利用 secretKey 对连接后的字符串进行加密,加密后的字符串即为最终的 Signature
3)secretKey 是密钥,密钥一定不能泄露。密钥泄露后,入侵者可以使用该密钥来签发 JWT Token,从而入侵系统。
See Also
版权声明: 本文为 InfoQ 作者【前行】的原创文章。
原文链接:【http://xie.infoq.cn/article/f57fe384726e0cbe06c4e5b01】。文章转载请联系作者。
评论