iOS系统如何实现app登录类似微信只需登录一次,退出后不需要每次登录?

如题
关注者
261
被浏览
62,427

8 个回答

ps:有人说在app端保存用户名和密码,这种方法被认为是不安全的做法,即使加密。

用户名和密码不应该存在于手机端,只应该在用户第一次登录和服务端交互时候存在,登录成功之后不应该出现在手机端的disk及ram中,这样才能保证用户名和密码不被盗取。和服务端的交互采用https + ssl pinning + PKI来加强安全性。

pps:之所以返回refresh token,是因为access token使用非常频繁,在网络中频繁传输会增大被盗取的可能性,所以有效时长应该较短,refresh token只有在更新access token时才会在网络中传输一次,相对安全,并且存储在手机的disk中也同样需要加密。


---------------------------------------------分割线----------------------------------------------------

一般的实现方法是,客户端在第一次登录后,服务端会同时返回一个access token和refresh token,access token有失效期,相对较短,用于每次和服务端通信的身份校验。refresh token用于access token失效后换取新的access token时的校验,成功后返回新的access token和新的refresh token。

上面说的足够多了。我来总结一下

最简单的:直存user password,拿来做示例程序可行。

次简单的:本地预存token,一般要求不高的产品足够了。

标准的:带时效检测的token,过时更换token。

较安全的:多层token,比如上面Jeff Yang说的,两层的token。我还见过3层的,但基本原理差不多,其实就是更复杂的机制获取token来保证安全性。

我来说一个最神奇的做法,一般的产品应该不会这么做,但我觉得很有意思,就是客户端根本就不存任何存根,没有user password,也没有token。而是,每次将device id(iOS已经没有device id,但有替代方法)和时间混合起来的字符串发送到服务端判断这台设备是否已经登录。