用户认证(Authentication)的方式
一、App Secret Key + HMAC
App Secret Key主要是用于识别用户身份
HMAC,一般是用SHA256算法对消息进行加密,防止消息被篡改、回放等
优势: 简单,一般会用于读取api鉴权。 比如微信获取头像接口、google map api。
劣势:App Secret Key时效太久,泄漏了就危害大。
改良方案:
- 每次App Secret Key都实时生成,增大服务器压力
- 使用双token方案(refresh_token、access_token)
二、JWT认证
- 用户使用用户名和口令到认证服务器上请求认证。
- 认证服务器验证用户名和口令后生成JWT Token(HMAC-SHA256对称加密),然后将
base64(header).base64(payload).signature
作为 JWT Token返回客户端。 - 客户端在请求应用服务器资源时,带上JWT Token。
- 应用服务器将JWT Token传给认证服务器检查 JWT Token,确认签名是正确的。
- 认证服务器检查JWT Payload 和 签名,验证通过后,告诉应用服务器。
- 应用服务认为请求合法,返回请求的资源
优势: JWT token中通过解密就可以获得用户身份信息,不需要服务端额外存储; 性能更好,服务器压力小。
劣势: 安全等级不够高,JWT token的暴露会导致用户信息泄露
三、Cookie/Session
客户端只在cookie中存放1个session_id, session_id关联用户信息保存在服务端中
优势: 安全级别高,适用于购物等网站
劣势:不够灵活,不支持跨域; 不好集成oauth2.0
三、OAuth2.0
主要使用场景: 平台级系统,要给第三方系统授权登录。 比如google账户、微信账号提供给第三方系统做登录