了解 OAuth2.0协议 预研第三方登录 定义接口

来源:互联网 发布:怀孕软件哪个好 编辑:程序博客网 时间:2024/06/13 05:31

最近的项目 app+服务器  需要使用第三方登录,先预研一下 第三方登录的原理,同时定义 app和服务器之间的接口。

以下是 学习的链接

http://blog.csdn.net/seccloud/article/details/8192707

第三方平台和本地用户系统结合应该分为三种情况:

  • 本地未登录,第一次登录第三方:此时相当于注册,直接把第三方信息拉取来并注册成本地用户就可以了,并建立本地用户与第三方用户(openid)的绑定关系,即 获取用户资料-注册-登录
  • 本地未登录,再次登录第三方:此时用户已注册,获取到openid后直接找出对应的本地用户即可
  • 本地登录,并绑定第三方: 这个只要将获取到的openid绑定到本地用户就可以了

那么第三方登录的流程 针对这三种情况,app和服务器的交互流程具体是什么样呢,这个是要我考虑 并设计的 下面以qq第三方登录 使用第三方sdk mob 为例:

1.本地未登录,第一次登录第三方 采用自动授权方式 

a.如何获取第三方信息:授权成功后 可以通过如下方式获取第三方信息

Platform qzone = ShareSDK.getPlatform(this, QZone.NAME);

String accessToken = qzone.getDb().getToken(); // 获取授权token

String openId = qzone.getDb().getUserId(); // 获取用户在此平台的ID

String nickname = qzone.getDb().get(“nickname”); // 获取用户昵称

b.需要获取哪些信息

qq平台的 openId

qq 昵称 nickname

qq 头像 platform.getDb().getUserIcon() figureurl_qq_1小头像 figureurl_qq_2大头像

qq 性别 platform.getDb().getUserGender() f 女 m 男

qq 年龄 没找到

qq 绑定手机号

c.如何注册成本地用户

1、点击您应用的“qq登录”按钮

2、通过用户指定的平台,使用getDb().getUserId()来得到用户在此平台上的id

3、如果id不为空,则提交给您的登录接口,否则调用showUser请求用户的资料

4、服务器接收到id以后判断用户是否已经注册,若已注册,认为登录成功,否则 服务器根据获取到得资料进行注册(在后台处理用户感觉不到

5、如果注册成功,引导用户进入客户端应用

d.如何建立本地用户与第三方用户(openid)的绑定关系

根据 登录类型和openid 组合判断是否已注册过

e.如果已经注册过 客户端进入应用的时候 读取openid进行登录,应该要有时效性。

如果没有时效性会存在如下问题,例如这个人的手机设备丢失,qq密码已修改,如果我们的app读取到自己保持的openid直接登录,那么会有安全问题。

使用mob sdk,plat.isValid() 来控制登录时效性,来判断授权是否有效(是否有授权,或授权时候过期)。

f.接口 需要的参数和返回值

参数:哪个第三方 openId 用户资料 ,返回值:已注册,未注册注册成功,其他错误

2.本地未登录,再次登录第三方:此时用户已注册,获取到openid后直接找出对应的本地用户即可

a.如何判断本地是否登录

app私有文件中保存上次登录的信息,应该保存如下内容 采用哪种方式登录 用户名密码/qq/微博/微信,如果是 用户名密码,则还应该保存 用户名 和 密码信息。如果该文件中 没有登录信息,则说明本地未登录过。

b.第三方用户已注册

c.后台直接登录

b和c 客户端和服务器交互 只需要一个接口就ok,服务器根据openId判断是否已注册,已注册告知客户端,客户端直接进入主界面。

3.本地登录,并绑定第三方: 这个只要将获取到的openid绑定到本地用户就可以了

如何app私有文件中已存在登录信息,说明本地登录过,如果是第三方登录 则根据第三方类型 调用mob接口,判断授权的有效性,如果是有效的 则通过mob接口获取 openId,和服务器交互 成功后直接登录就ok了。


0 0
原创粉丝点击