如今,很多移动应用在做用户注册/登录的时候,为减少用户的交互成本,会考虑引入常用的第三方平台的开放登录授权来快速的将用户倒流到自己的平台中。在原来的第三方登录中,很多是采用基于 Web 的 Oauth 登录授权机制,在这种情况下,用户需要在 APP 弹出的网页中输入第三方平台的账号和密码进行登录,然后授权当前应用允许访问自己的账号。而现在更多的则采用的是所谓 SSO 授权机制,用户在点击第三方登录按钮后,应用会将用户引导至对应的第三方应用中,接下来只需点击授权按钮即可完成授权过程,大大增强了操作的便捷性和账号的安全性。但对于服务端开发者来说此时可能会发现,之前基于 Web 的 Oauth 登录授权会产生一个回调,服务器可以基于此来做授权验证。但在 SSO 这种机制下,回调会直接返回给应用本身而不经过服务器。这种时候应如何处理授权验证的问题呢?

解决方案就是针对不同的第三方平台,服务端再利用平台所提供的开放接口来对授权进行一次验证。

以QQ登录为例,其实在其官方文档中也提到了关于登录校验的解决方案:

1.2 需要考虑对OpenID和OpenKey做校验

应用接收页面请求时,必须对OpenID和OpenKey做校验,以预防XSS漏洞。

OpenID的校验规则:长度为32的16进制字符串,字符在[0-9A-F]范围内。 开发者必须按照该规则对请求中传来的OpenID进行校验。(根据该规则生成的正则表达式:^([0-9A-F]{32})$)

OpenKey的校验规则:长度为不固定的字符串,不能为空。建议开发者不要检查openkey的长度,也不要在后台存储openkey,否则可能会导致用户无法登录。开发者可调用v3/user/is_login接口对请求中传来的Openkey做登录态校验。

1.3 进行登录态校验的方法:

用户进入应用时,URL中会带有该用户的OpenID和openkey,这时应用只要调用腾讯的任意后台API,都可以验证用户的登录态是否合法。

但是如果仅仅为了出于验证登录态 目的而去随意调用某一个OpenAPI,则会给后台服务造成很大的压力 。

因此更推荐应用在用户进入应用时通过以下方式进行登录态校验:

(1) 方式1:调用v3/user/get_info 接口来验证登录态。该接口即可验证登录态又可以获取登录用户的信息,1个应用一般都需要获取登录用户的信息,因此调用本接口可一举两得。

(2)方式2:调用专门的登录态校验接口v3/user/is_login。

在应用取得授权之后,应用可获得 OpenID 和 OpenKey。服务器可提供一个授权登录接口,要求应用将获得的 OpenID 和 OpenKey 传入,然后服务器可根据建议的方法调取 v3/user/get_info 接口(这样同时可以得到用户的基本信息作为注册资料写入),如果调取成功,则说明有效。这时服务器才考虑写入新的用户数据并完成注册/登录步骤。不过要注意获取用户信息的接口是需要取得权限的,因此要记得在授权登录的时候申请该权限,以 iOS 为例,要加入 kOPEN_PERMISSION_GET_INFO 权限参数。

再以新浪微博为例。新浪微博关于这一点没有明确说明(或者我没有找到)。在应用取得授权之后,应用可获得 uid 和 access_token 等。因为新浪微博接口基本基于 OAuth2 官方标准规范来做的,因此可以在 OAuth2 的接口中找到 授权查询(oauth2/get_token_info) 的接口, 它可以查询用户 access_token 的授权相关信息,包括授权时间,过期时间和 scope 权限。该接口同时会返回该 access_token 对应的 uid,可以与应用获得的 uid 进行比对,以此来对授权进行验证。

由此可以看出,SSO 机制对于用户来说确实更为友好,但因为实现机制和平台提供的 API 接口与标准的 Oauth 授权过程有所不同,因此这对于开发者来说就带来了一些额外的工作。当然方法其实都大同小异,因此只要想到这一点,再找到合适的切入点,就可以很顺利的达到目的。

服务器端授权验证,移动应用的第三方平台登录在服务端的授权验证相关推荐

  1. 微信开放平台之第三方平台代公众号发起网页授权

    正式讲解之前我想问一个问题: 微信开放平台第三方平台为什么会出现?或者说微信的开发人员为什么弄出个开放平台的第三方平台出来? 我的理解是:原本公众号开发时只能给一家公司开发,因为配置的网页授权域名只有 ...

  2. 跨平台第三方平台登录和单点登录

    跨平台第三方平台登录和单点登录 官方介绍: 单点登录:简称为 SSO,是比较流行的企业业务整合的解决方案之一.SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统. 个人 ...

  3. Apache Oltu 实现 OAuth2.0 服务端【授权码模式(Authorization Code)】

    要实现OAuth服务端,就得先理解客户端的调用流程,服务提供商实现可能也有些区别,实现OAuth服务端的方式很多,具体可能看 http://oauth.net/code/ 各语言的实现有(我使用了Ap ...

  4. 《“透视”个人大数据》项目开发小记 --(二)网络服务端,邮箱验证和手机验证(C#,Java)

    现在网络的应用越来越普及,网络的构建也越来越简便,对于某些研究性项目自建网络服务端 也是可行的方案.本项目的网络服务,是用C#,基于Socket构建的,核心的工作是通过自定的BS60传输协议,实现与手 ...

  5. MVC验证10-到底用哪种方式实现客户端服务端双重异步验证

    本篇将通过一个案例来体验使用MVC的Ajax.BeginForm或jQuery来实现异步提交,并在客户端和服务端双双获得验证.希望能梳理.归纳出一个MVC异步验证的通用解决思路.本篇主要涉及: 1.通 ...

  6. Facebook 授权登录(服务端)

    Facebook 授权登录(服务端) 一.Facebook配置 1.注册开发者 在facebook开发者官网注册成开发者 2.创建应用 点击右上角->我的应用->创建应用 3.获取应用编号 ...

  7. golang 苹果登录,服务端验证identityToken(真实有效)

    介绍 2019年之后,对于Apple App来说,如果要支持第三方登录,则必须同时支持苹果的第三方登录,即Sign in With Apple, 本文主要介绍如何使用Go语言实现Sign in Wit ...

  8. 【实战 Ids4】║ 客户端、服务端、授权中心全线打通!

    1.经过元旦两天的全力整改,终于在这新的一年,完成了我的布道生涯的第一个大步走 -- 那就是客户端(VUE).服务端(ASP.NET Core API).授权中心(IdentityServer4)的大 ...

  9. 苹果支付成功后,JAVA服务端二次验证

    原理简述: 苹果客户端在完成应用购买,下单后支付,苹果后台会给客户端返回信息,用来验证支付结果: 客户端在拿到返回值后,将指定返回值,通过接口形式请求应用服务器,应用服务器根据这个值调用苹果服务器进行 ...

最新文章

  1. 这位年仅27岁的阿联酋人工智能部长,竟计划2117年火星造城,真是有钱帅气又任性!
  2. 一致性哈希算法——算法解决的核心问题是当slot数发生变化时,能够尽量少的移动数据
  3. mysql utf8mb4 配置_MariaDB(Mysql)配置utf8mb4编码
  4. C++ 0x 使用可变参数模板类 实现 C# 的委托机制
  5. JAVA SSM框架+Redis 实现单点登录
  6. 当红开发语言Go,真的是未来的技术主流吗?
  7. php mysql 验证码代码_PHP_PHP 验证码的实现代码,checkcode.php 生成验证码图片, - phpStudy...
  8. Servlet教程第8讲笔记
  9. 继电保护整定值计算软件_继电保护整定计算软件
  10. 情侣天气推送升级简单版 项目上传github实现定时自动推送教程
  11. 年薪50万的程序员_2018年这类程序员工资最高!年薪50万只能算一般
  12. springboot+vue+elementUI springboot地方废物回收机构管理系统-#毕业设计
  13. HDU5755 Gambler Bo
  14. shell脚本下载小猪佩奇中文版全集mp3
  15. 从零到一实现复杂表格需求(antd table 合并行 合并列)
  16. localhost:8080打不开本地网页
  17. Java能抵挡住JavaScript的进攻吗?【转载】
  18. [刷题]leetcode\189_轮转数组
  19. 网站建设(一)PHP深入学习
  20. KOL营销→品牌IP,小红书品牌升级方法论

热门文章

  1. python降维效果图_python实现拉普拉斯特征图降维示例
  2. 住宅区和住宅建筑内光纤到户通信设施工程设计规范_山西开展综合布线系统工程设计 验收规范专题培训...
  3. 箭头标线的类型和面积
  4. 洛谷 P1024 一元三次方程求解
  5. Django return
  6. JQ中的方法、事件及动画
  7. Zabbix监控Linux主机设置
  8. sublime text 自动保存
  9. 网络基础知识----------iptables
  10. 使用多级分组报表展现分类数据