Android + Django + OAuth2 + Stub Authenticator

概况

最近研究了一下如何在Android上添加新的account。实际上我是为了实现Sync Adapter而做的准备工作。目前的需求是这样的,在一个web server上有用户的数据(protected data/api),web server后台是自己用Django做的,安装了oauth toolkit提供OAuth2授权服务。现在待开发的Android App需要实现一个stub authenticator,用来向Android系统添加新用户,并在添加用户过程中与web server进行交互,登录并获取符合OAuth2规范的access token(在Android系统上也称为authToken)。成功添加用户后,Sync Adapter应当可以通过保存在设备上的access token访问位于web server上的用户数据。


由于自己是Android初学,目前仅实现了添加用户和获取access token。尚未实现refresh token的逻辑。这里仅做一个记录,等后期完善后再对本文进行更新(也许是自己骗自己也说不定。。)


目前开发的目标系统是Android API24,web server跑的是Django 1.11,安装了oauth toolkit。Android App利用Retrofit库实现对web server的访问(在OAuth2的定义下,这个server也是auhorization server)。调试时server和Android App都运行在本地,本机局域网ip地址为192.168.123.96,Django跑在8080端口上。


方案

本工作受到了如下博文的启发,并直接使用了博主公开的部分代码。

http://blog.udinic.com/2013/04/24/write-your-own-android-authenticator/


罗列一下所用到的概念、功能和库:

(1)Android要求我们通过继承AbstractAccountAuthenticator来定义我们的Authenticator。

(2)为了能够协助在Android上注册新的用户并获取所需的授权(access token),Android预定义了AccountAuthenticatorActivity作为辅助。

(3)为了能在添加新用户到Android系统上时访问authorization server并提示用户登录和授权access token给App,App需要另外一个Activity来显示网页,这利用了Android的WebView,并且配置了WebViewClient用于过滤http(https)协议或非http(https)协议。访问web server是通过Retrofit完成的。


目前的App在添加account到Android系统方面的设计构成图如下图所示。该图的全尺寸版本位于我的个人主页上。




基于上图对添加account的流程进行说明和解释。红色圈表示流程号,以下用“流程x”指代。

(1)通过继承AbstractAccountAuthenticator获得Authenticator类,Android要求派生类override多个方法,这里主要实现addAccount()和getAuthToken()方法,其他方法为默认形式。

(2)在Android系统的Settings->Accounts里,点击Add account,之后通过点击本App的列表条目时(如下图所示)将从Android系统的account manager发出一个调用,调用Authenticator的addAccount()方法,如流程1。目前App向Android系统注册的用户类型名为“huyaoyu.com",是我的个人主页地址,图标仅是一个png图片。



(3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值