【Android】OAuth验证和新浪微博的oauth实现
关于OAuth验证
OAuth是当下流行的授权方案,twitter,facebook,google等大型网站的开放平台都支持了oauth验证模式,国内的新浪微博、腾讯微博、163微博的开放平台也相继支持了这种验证模式。
引用维基百科的相关说明
oauth是一个开放的标准,允许用户让第三方应用访问该用户放在某一个网站的私密资源,而无需将用户名和密码传递给第三方应用。
oauth允许用户提供一个令牌,而不是用户名和密码来访问他们存放在特定服务提供者的数据。
举例来说就是:
用户A在服务提供者B上存放了一些资源,B支持oauth授权模式,A在B上是注册用户,有用户名和密码,使用用户名和密码登陆B就可以查看自己的资源。
假设有一个应用C,用户A在使用C的时候需要自己在B上存放的资源。
有两种方法来实现C上显示自己在B上的资源。
- 一种是在C上输入自己在B的用户名和密码,让C帮自己登陆,获取资源,然后显示在C上,但是这么做太不放心了,C是一个什么样的应用,用户A不放心把B的用户名和密码交给C。
- 第二种是在C上也存放一份相关资源,这样C就直接显示用户A在C上的资源就可以了。这样的话,用户的维护量就会很大,资源的同步更新很让人头疼的。
这时候C就可以使用B开放的oauth授权机制了,用户A在想要显示B上的资源的时候,C会跳转到B的验证页面,用户在B的页面输入用户名和密码,通过之后,会询问用户是否开发相关的资源给C应用,用户可以自定义C可以访问的资源,然后再跳转回C应用。
这样既不用担心用户名和密码的问题,又不用同时存放多份资源造成的维护问题了。
oauth实现过程

从上图我们可以看出,整个过程分为consumer和provider两个部分。
consumer也就是例子中的c应用,provider就是例子中的B服务提供者。
使用OAuth进行认证和授权的过程如下所示:
- 用户访问客户端的网站,想操作用户存放在服务提供方的资源。
- 客户端向服务提供方请求一个临时令牌。
- 服务提供方验证客户端的身份后,授予一个临时令牌。
- 客户端获得临时令牌后,将用户引导至服务提供方的授权页面请求用户授权。在这个过程中将临时令牌和客户端的回调连接发送给服务提供方。
- 用户在服务提供方的网页上输入用户名和密码,然后授权该客户端访问所请求的资源。
- 授权成功后,服务提供方引导用户返回客户端的网页。
- 客户端根据临时令牌从服务提供方那里获取访问令牌。
- 服务提供方根据临时令牌和用户的授权情况授予客户端访问令牌。
- 客户端使用获取的访问令牌访问存放在服务提供方上的受保护的资源。
新浪微博的oauth

借用一张新浪微博的oauth验证流程图。
我们在新浪微博开放平台新建应用的时候都会分配给新建应用一个key和secret,也就是consumerKey和consumerSecret。通过这两个东西,我们去request_token,然后将用户重定向到新浪微博平台的授权页面,授权之后,根据callback_url跳转到我们应用的一个地址,我们再次使用request_token获取access_token,在后面就需要通过access token来访问开放平台提供的需要验证的接口了。
当然了,那些不需要验证就可以访问的接口,就直接使用key就可以访问了,详情可以参考开放平台提供的API文档。
腾讯微博和163微博的开放平台也是类似的原理和实现。
结合新浪微博说OAuth认证
首先罗列一下关键字组,下面四组关键字跟接下来OAuth认证有非常大的关系。
- 第一组:(App Key和App Secret),这组参数就是本系列文本第一篇提到的建一个新的应用获取App Key和App Secret。
- 第二组:(Request Token和Request Secret)
- 第三组:(oauth_verifier)
- 第四组:(user_id、Access Token和Access Secret)
新浪微博的OAuth认证过程
- 当用户第一次使用本客户端软件时,客户端程序用第一组作为参数向新浪微博发起请求;
- 然后新浪微博经过验证后返回第二组参数给客户端软件同时表示新浪微博信任本客户端软件;
- 当客户端软件获取第二组参数时作为参数引导用户浏览器跳至新浪微博的授权页面;
- 然后用户在新浪的这个授权页面里输入自己的微博账号和密码进行授权,完成授权后根据客户端设定的回调地址把第三组参数返回给客户端软件并表示用户也信任本客户端软件;
- 接下客户端软件把第二组参数和第三组参数作为参数再次向新浪微博发起请求;
- 然后新浪微博返回第四组参数给客户端软件,第四组参数需要好好的保存起来这个就是用来代替用户的新浪账号和密码用的,在后面调用api时都需要。
从这个过程来看用户只是在新浪微博的认证网页输入过账户和密码并没有在客户端软件里输入过账户和密码,客户端软件只保存了第四组数据并没有保存用户的账户和密码,这样有效的避免了账户和密码透露给新浪微博之外的第三方应用程序,保证了安全性。
参考
http://www.cnblogs.com/hll2008/archive/2011/01/03/1923674.html
http://www.cnblogs.com/virusswb/archive/2011/08/04/2126894.html
【Android】OAuth验证和新浪微博的oauth实现的更多相关文章
- iOS之新浪微博的OAuth授权
新浪微博的OAuth授权 之前通过新浪微博开发平台写过微博的的项目,现在就开始总结下各个方面的知识点,一个是为了加深印象.巩固知识,另一个记录自己学习过程,希望自己在开发这条路上有所积累,为以后的道路 ...
- Android证书验证存漏洞 开发者身份信息可被篡改(转)
原帖地址:http://bbs.pediy.com/showthread.php?p=1335278#post1335278 近期在国内网易,雷锋网等网站爆出谷歌市场上的索尼官方的备份与恢复应用&qu ...
- BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第10章节--SP2013中OAuth概览 SP2013中的OAuth
BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第10章节--SP2013中OAuth概览 SP2013中的OAuth SP apps使用OAuth授权 ...
- Facebook通过oAuth验证获取json数据
首先下载facebook相关的动态库,下载文件:facebook.dll 获取授权token方法: private string SetToken(string gettoken)//此处是你的短to ...
- twitter通过oAuth验证获取json数据
protected void Page_Load(object sender, EventArgs e) { var oAuthConsumerKey = "你的key"; var ...
- Android 正则表达式验证手机和邮箱格式是否正确
demo例子: package it.com.cc; import java.util.regex.Matcher; import java.util.regex.Pattern; import an ...
- Android 滑块验证
先上图看看实现效果 1.在 app 的 build.gradle 添加依赖 implementation 'com.luozm.captcha:captcha:1.1.2' 2.将 Captcha 添 ...
- Android免费短信验证
转载请注明住处:http://blog.csdn.net/crazy1235/article/details/41912003 介绍 短信验证功能大家都很熟悉了.在很多地方都能见到,注册新用户或者短息 ...
- 移动应用安全开发指南(Android)--数据验证
概述 移动应用往往通过数据的发送.接收和处理来完成一系列功能,通常情况下,处理的数据绝大部分都来源于外部(比如网络.内部或外部存储和用户输入等),对这些数据处理不当会导致各种各样的漏洞和风险,比代码执 ...
随机推荐
- Iphone开发基本UI组件
在IOS中的基础UI组件,IPHONE的组件大多以UI开头,这种独树一帜的命名方法极有可能是为了与其他系统的组件进行区分,避免混淆引起冲突: 下面描述一下IOS的基础UI控件以及和Android中的 ...
- spring事务配置的两种方式
spring所有的事务管理策略类都继承自org.springframework.transaction.PlatformTransactionManager接口. <!-- 事务管理器配置,单数 ...
- (原)luarocks更新某个模块
转载请注明出处: http://www.cnblogs.com/darkknightzh/p/6424398.html 参考网址: https://github.com/torch/nn/issues ...
- Java中用HttpsURLConnection访问Https链接
在web应用交互过程中,有很多场景需要保证通信数据的安全:在前面也有好多篇文章介绍了在Web Service调用过程中用WS-Security来保证接口交互过程的安全性,值得注意的是,该种方式基于的传 ...
- 向大家介绍15个漂亮的Ubuntu GDM主题
没事向大家介绍几个Ubuntu GDM主题,希望大家喜欢,这些Ubuntu GDM主题是我找了很久的…… "GNOME Display Manager允许用户轻松的设定登录界面主题.网上有大 ...
- zabbix3.0 安装时出现PHP Parse error: syntax error
httpd的错误日志 [Sun Mar :: ] [error] [client 由于系统yum默认安装的php版本是5.3.3 zabbix 3.0支持的平台,只支持php5.4以上的版本https ...
- visual studio 设置代码注释模板
1.C#模板文件: 路径:C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\ItemTemplates\CSharp\Co ...
- MySQL安装Altas
准备工作:需要先把MySQL主从配置好. 0.下载altas:打开https://github.com/Qihoo360/Atlas/releases wget https://github.com/ ...
- IDEA 配置Gradle编译工具
下载解压自己需要的gradle版本:https://gradle.org/releases/(免安装) 配置环境变量 打开命令窗口,输入 gradle -v IDEA配置gradle:file-> ...
- 关于less在DW中高亮显示问题
首先, 找到DW 安装目录. Adobe Dreamweaver CS5.5\configuration\DocumentTypes 中的,MMDocumentTypes.xml 这个文件,然后用记事 ...