本文介绍 Web 应用中实现用户认证的一种新方式 JWT(JSON Web Tokens) 。
由于工作需要最近返修一个 Web 项目的restfull api服务端。考虑到这个应用涉及到不同的客户端有pc端,ios app,和小程序,不得不重新设计服务端的架构。
老系统用户认证采用的是session的方式来实现用户认证,存在几个问题。
- api server是分布式的, 存在多个server, 用户在一个 server 上登录了,下一次请求可能访问到另外一个server,这个时候无法去读到session。
- 客户端 使用 restfull api 来获取数据, restfull api 的原则是 stateless, 但使用 session, 使用 session 和 cookies 会引入 state; 另外, 当 API server 与 app server 可能是两个 server, 需要 允许 CORS(), 但是 cookies 只能在同一个 domain 中使用。
- app 可能需要访问很多个server,每个server都必须要设置cookie。
解决办法: 使用 JWT 方式来验证用户
JWT 方案不使用 session 基于 token.用户注册之后, 服务器生成一个 JWT token返回给浏览器, 浏览器向服务器请求
数据时将 JWT token 发给服务器, 服务器用 signature 中定义的方式解码
JWT 获取用户信息.
jwt
一个 JWT token包含3部分:
- Header: 指定加密算法和 token 类型
- Payload: 必须使用 sub key 来指定用户 ID, 还可以包含其他业务信息如用户名,权限。
- Signature: 用来加密Header和Payload生成签名。
未完待续。。。