第三方受权后的自动登录怎么作?怎么作才安全?

首先,第三方受权怎么作请百度。java

正文,请先看代码sql

public class MyApplication extends Application {


 public static Context context;//登陆的用户id

 public static String username;//登陆的用户名

 public static int userid;//登陆的用户id

 public static boolean loginflag;//用户的登陆状态
 
 @Override
 public void onCreate() {

   loginflag=false;

   context=this;

   checkLogin();
 }

public void checkLogin() {
  new Thread(){
   @Override
   public void run() {
    super.run();
    //本app本身的帐户系统

    //1.使用保存的登录状态(需保存用户状态和至少一个惟一性字段,如用户id;可是明显不安全)

    //2.请求服务器登录(使用保存的用户名和密码)
   
 
    //借助sns的受权登录

    //3.使用保存下来的Token验证,无需发送给服务器了(最终也是不安全)

    //第3种状况 参考各sns平台的Token类的有效性判断方法boolean isSessionValid()

    //发现:

    //保存Token都是有风险的,并且本地的数据又能够伪造+Token类自己的判断只依赖这种数据
 
    //那么就同 第1种 相似了
  
    //4.每次都调出sns平台的受权页,如同第一次受权般
   }
   
  }.start();
 }

首先这有个假设,就是能够人为地对程序保留数据(如sqlite、sharedpreferences)进行更改。没有root的安卓设备彷佛不能够改,但已root的安卓设备应该能够改。由于我没有设备可测,可是使用AVD模拟器,发现能够导入导出sharedpreferences的xml和使用adb进入sqlite,应该也能够修改。而猜测AVD至关因而已root的安卓设备。安全

第1种状况 明显不安全在于,只修改用户id就能够登陆别人的帐号了;服务器

第2种状况 我认为是安全的;app

第3种状况 我认为不安全在于,一是修改expires_in能够一直可以登陆该app,二是修改uid也许就能登陆别人的帐号。ide

详细请见上面代码注释,只附下代码ui

(sina微博的Token类)this

  public boolean isSessionValid()
  {
    return !TextUtils.isEmpty(mAccessToken);
  }

qq的Token类也是相似的判断。code

第4种状况,原本我是以为这样子很麻烦,但彷佛没有其余方案,好比经过一个方法不用拉取受权页就能向sns平台调取上一次的Token,由于你保存这个Token在本地那就不安全,可是目前我没有找到这个方法。sqlite

一点点安慰,看了下qq斗地主和雷霆战机 这两款app对QQ自动登陆也是使用的方案4。

思考了下第4种的替代,就是赞成受权登录后到本app服务器获取用户名和密码保存,可是形成了密码泄露,另外服务器也可能不直接存储密码,因此仍是别这么用。

相关文章
相关标签/搜索