OAuth2, 使用用户名和密码获取 access_token 和 refresh_token。每种客户端都预分配一个 client_id 和 client_secret(这样服务器就可以在必要的情况下禁用特定的 client_id;甚至可以根据不同的 client 分配不同等级的权限)。
> 判定用户是否已经登录
1) access token 没过期的话,直接认为用户已登录
2) access token 过期,有 refresh token 的话,使用 refresh token 来换取 access_token,成功的话就算登录成功,否则清除保存的 token,认为用户没有登录
3) 都没有的话,认为用户没有登录
> 如何对每一次 api 请求进行验证
OAuth2 的标准方式,每次发送请求时带上 access token。
> 服务端与客户端通信时确保用户授权信息不被泄露
使用 https。如果只是 app 用的话,使用自建 CA 签名的证书就可以满足要求,再 app 代码里作好证书验证即可;不过这样的话证书签发管理、处理证书过期等等会稍麻烦些,有条件的话还是建议购买正式的 ssl 证书。
^ 参见:
http://tools.ietf.org/html/rfc6749#section-1.3.3^ 注意服务器可以在必要的情况下强行使没过期的 token 失效(比如提供了让用户踢掉其它登录的客户端的功能),客户端发现这种情况要报错并提升用户重新使用用户名和密码登录。