Android 自带浏览器谷歌账号自动登录的实现

来源:互联网 发布:造价师工程师网络教育 编辑:程序博客网 时间:2024/05/29 23:45

Google 的账号自动登录功能主要依靠x-auto-login这个http头部字段来触发的。

X-auto-logingoogle私有的一个头部字段,在android自带浏览器和chrome中存在对这个http字段的处理。

一、服务端在何时会返回X-Auto-Login 

PC端使用任何浏览器(IEchrome)访问google账号登录页面时,服务端都会返回带有X-Auto-Login字段的HTTP Response

在手机端访问google账号登录页面与PC端相同;在未登录google首页下,使用chrome-APK访问google首页时会多返回一个mobilesignin页面,这个页面包含了X-Auto-Login字段,如果在chrome中登录了同步账号,并且允许自动登录时就会弹出自动登入提示窗口;在未登录google首页下,使用android 4.0以上设备访问google首页会直接返回带有X-Auto-Login字段的HTTP Response

X-Auto-Login:

realm=com.google&account=zzjjob%40gmail.com&args=continue%3Dhttp%253A%252F%252Fwww.google.com.hk%252F

X-Auto-Login 中包含三部分内容:

Realm : 在AccountManager中查找账号时使用的type

Account :当服务器侦测到有账号已经登录时,会在这里包含已经登录的账号

侦测账号是否登录是依靠cookie来实现的,在登录谷歌账号时会创建一个cookie,在下次登录时就会拿这个cookie给到服务端,服务端验证已经有账号登录时会在Account中包含用户名;在登出谷歌账号时,会将此cookie删除。

在线状态,访问登录页面的表现为:

移动设备登入同步账号后,Chrome-APKandroid自带浏览器还会弹出自动登录窗口



离线状态,访问登录页面的表现:

有自动填充的会自动填充,没有的就不会



Args :想要得到认证的页面

二、手机上chrome与自带浏览的自动登录的实现

以下是android 4.1.1_r1.1中自带浏览器的实现逻辑

1、在主Frame的主资源加载完成后会检查是否包含X-Auto-Login字段,如果包含的话,就会触发自动登入

2、解析出X-Auto-Login的 realmaccountargs

3、在设备中查找已经登入的账号中是否存在 account

4、如果存在 account 账号,使用AccountManager 获取认证令牌( auth token )

5、如果第4步中没有找到 account 账号,列出所有的账号在登录提示窗口中

6、选中一个账号以后,使用AccountManager获取认证令牌( auth token )

7、认证完成后,调用WebView加载

String result = value.getResult().getString(

                    AccountManager.KEY_AUTHTOKEN);

加载的页面为account.google.com,进行登录

8、登录完成,跳转回最初的页面

三、使用AccountManager的好处

AccountManager 集中式的管理了不同的账号和身份认证,它能够方便的授权给第三方程序去访问在线资源。许多服务器支持认证令牌(auth token)的概念,令牌用来发送用户的实际密码进行身份认证,第三方的程序使用AccountManager去获取身份认证的好处就是可以不用直接接触密码,AccountManager会生成令牌,然后帮助第三方程序去完成身份认证。