android 单点登录功能

标签: android 登录 | 发表时间:2017-08-22 13:46 | 作者:shaoyezhangliwei
分享到:
出处:http://blog.csdn.net

很多伙伴在开发自己公司产品的时候,一般都会考虑用户账号安全 ,或者用户账号功能使用限制等问题。这时候我们就会考虑到单点登录这个功能。

一般情况下我们在开发单点登录功能的时候,其实有很多种做法,这个根据自己的具体需求选择就可以,其实我一直认为很多东西没有绝对的规则,我们其实需要做的是尽量全面的尽可能多的去掌握更多的知识技术,当我们用到的时候可以从中选择出最适合自己的产品的技术,从开发时间,应用性等。

好了 ,多说了几句题外话,我们现在言归正传,说说我做单点登录的实现方式。


1.创建token

首先我们要在服务端创建一个token的值,这个值是和userid以及手机码绑定到一起的,也就是请求token的时候我们要给服务端传递当前设备的设备号及用户id。token这个值就是客户端调用服务端的凭证。

android 中获取机器唯一标示 deviceid

  //deviceId
    public static String getDeviceId(Context context) {
        TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
       if (tm == null) {
           return "";
       }
       return "" + tm.getDeviceId();
   }

但是这个很多机器是无法获取到的这个值,所以后来改为mac地址,mac地址很好理解,就是用户上网的上网许可证,这个买手机的时候,你翻开电池就知道里面有一个标签!

	/**
	 * 获取MAC地址,注意:手机重启,mac地址为null;
	 * 
	 * @param context
	 * @return mac地址;
	 */
	public static String getMac(Context context) {
		if (context != null) {
			WifiManager wifi = (WifiManager) context
					.getSystemService(Context.WIFI_SERVICE);
			WifiInfo info = wifi.getConnectionInfo();
			return info.getMacAddress();
		} else {
			return "";
		}
	}


2.获取token

app进入app时要先获取token,获取token的时候我们要给服务端传递当前设备的设备号,当我们换了设备后设备号变了,返回的token值也就变了,那么原设备的token相对来说就失效了,当在原设备和服务端有交互的时候就会返回token失效,用户登陆注销等要及时更新token值。


3.请求交互携带token

每次客户端和服务端有任何交互的时候都要传递这个token参数,当我们在另一台设备登录的时候原设备上存的token就失效了,因为数据库里面当前用户的token已经在新设备获取toekn的时候覆盖了,这样原设备请求时就会提示token失效了。

4.根据服务端返回码处理逻辑

事先客户端和服务端要约定好一个code码,例如:我们约定返回码为99的时候代表token失效,那么当我们请求服务端返回值为99的时候就要提示 您的登陆状态失效,请您重新登陆。

switch (code) {
    case 1:
      break;
    case 99://被踢下线
      //Do Something
      break;
    }


上面说了自己用自己的业务系统实现app单点的基本流程。

其实还有一种情况,我们不用自己做这些工作,就是我们集成了三方的即时通讯sdk,比如 环信sdk,腾讯云通讯sdk。这些都是有自己的监听用户状态的机制的,可以找到对应得监听直接加入自己的业务处理逻辑。


关于这块了解的就这些,如果大家有其他好的思路或者开发中碰到一些问题都可以加入我的qq群讨论

开发一群:454430053开发二群:537532956








作者:shaoyezhangliwei 发表于2017/8/22 15:12:23 原文链接
阅读:115 评论:0 查看评论

相关 [android 登录] 推荐:

android 单点登录功能

- - CSDN博客移动开发推荐文章
很多伙伴在开发自己公司产品的时候,一般都会考虑用户账号安全 ,或者用户账号功能使用限制等问题. 这时候我们就会考虑到单点登录这个功能. 一般情况下我们在开发单点登录功能的时候,其实有很多种做法,这个根据自己的具体需求选择就可以,其实我一直认为很多东西没有绝对的规则,我们其实需要做的是尽量全面的尽可能多的去掌握更多的知识技术,当我们用到的时候可以从中选择出最适合自己的产品的技术,从开发时间,应用性等.

android WebView登录状态session id 和cookie同步

- - 移动开发 - ITeye博客
android客户端通过httpClient或者httpUrlConnection进行登录后,为了把登录状态同步到webView中,这时需要进行cookie的同步.         nvPairs.add(new BasicNameValuePair("gender", "男"));.

从登录开始

- - 博客园_知识库
  那就先来看看为什么而做.   就数据而言,网站的流量仍是大量的匿名用户带来的. 我们无法根据请求的任何方面(ip地址,用户代理等)准确识别来自同一人的连续请求.   不能识别,自然无法对其分类进而转化挖掘,获取网站所需的价值.   互联网服务于人,要开发一个真正令人动心的网站,我们必须触达到浏览器后面那些活生生的人.

jass登录认证

- - 行业应用 - ITeye博客
Java 认证和授权服务”(Java Authentication and Authorization Service,JAAS)是对 Java 2 SDK 的扩展. JAAS 可分Authentication和Authorization. 1)  Authentication:认证用户身份. 通俗的来说就是哪个用户在执行操作.

登录密码与HTTP Request

- - 博客园_首页
我们知道,在一些主流的浏览器中按F12,就会拉出一个查看web访问详细信息的窗口,在firefox中叫firebug,在chrome或者IE中,则叫developer tools,他们功能都大同小异,当然,比较重要的自然是查看http request与response, 幸运的是,这三个工具都把其放在一个叫Network的tab下面,虽然显示格式略有不同,但基本信息都是一样的.

cas配置单点登录

- - 开源软件 - ITeye博客
        最近一段时间研究的cas,不知道是什么原因,可能自己最近太浮躁了,没有沉下心来去研究,所以一直拖着,将近拖了一周半的时间,上周的周总结,确保一定要解决的问题,今天还是横下心来,处理完这个问题,我是一个对于技术痴迷的人,对于现在研究出来这个结果非常高兴,与大家分享一下:.        注明:本文所讲的至少怎么配置,但是具体的原理和细节会在稍后的时间里更新给大家,如有不对的地方希望大家指出来,共同学习和探讨一下.

SSH的登录限制

- - 操作系统 - ITeye博客
从网络来的数据包首先要经过iptables,所以可以在iptables上面加上规则来限制ip的访问. 比如只限制3个外网,1个内网IP连接. 直接在/etc/hosts.deny里面加一行. sshd: ALL EXCEPT xxx.xxx.xxx.xxx(允许的ip或网段). sshd: ALL EXCEPT xxx.xxx.xxx.xxx/255.255.255.0(允许的网段) 就可以了.

账号系统的两阶段登录和三阶段登录

- - idea's blog
简单的账号登录是一阶段登录, 也即用户提供用户名和密码, 然后服务器端验证账号和密码是否正确以决定是否成功登录. 一阶段登录其实安全性是非常危险了, 其危险性就在于这个登录流程涉及到的数据都是静态的, 因为用户名和密码一般不会改变.. 为了在登录流程中引入动态数据, 必须把流程改为两阶段登录: 1, 获取动态临时 secret salt; 2.

Android 遥控车

- CasparZ - LinuxTOY
您确定您真的会用 Android 手机玩赛车. 16 岁的法国学生 Jonathan Rico 使用 Android 手机通过蓝牙实现了对改装玩具汽车的遥控. 操控的方式和那些标榜的智能手机游戏一样,使用重力感应,差别是这次控制的是现实世界中的遥控汽车. 收藏到 del.icio.us |.

Android免费?毛

- Ruby - FeedzShare
来自: 36氪 - FeedzShare  . 发布时间:2011年08月17日,  已有 2 人推荐. 微软CEO Steve Ballmer在预测竞争对手产品时通常口无遮拦. 比如他去年抨击Google的Android战略时,很多人都不屑一顾. 接着Android蚕食了微软的地盘,后来又开始侵犯苹果的地盘.