【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)--数据验证
概述 移动应用往往通过数据的发送.接收和处理来完成一系列功能,通常情况下,处理的数据绝大部分都来源于外部(比如网络.内部或外部存储和用户输入等),对这些数据处理不当会导致各种各样的漏洞和风险,比代码执 ...
随机推荐
- Nginx自定义404页面
指定一个错误页面: error_page 404 /404.html; location = /404.html { root /usr/share/nginx/html; } 指定一个url地址: ...
- org.openqa.selenium.remote.UnreachableBrowserException: Could not start a new session. Possible causes are invalid address of the remote server or br
WARN <init>, HHH000409: Using org.hibernate.id.UUIDHexGenerator which does not generate IETF R ...
- Python验证码识别处理实例 深度学习大作业
转载自:http://python.jobbole.com/83945/ http://www.pyimagesearch.com/2014/09/22/getting-started-deep-le ...
- 使用tmpfs的好处
EBS上超高频率的IO写入 这几天注意到我的EC2机器上有非常大量的IO,导致AWS的总体开销增加了很多.比如9月份的帐单中: I/O requests 120,076,984 IOs ...
- React(0.13) hello world
<!DOCTYPE html> <html> <head> <title>React JS</title> <script src=& ...
- k8s实战读书笔记
一.概述 kubernetes中Service是真实应用的抽象,将用来代理Pod,对外提供固定IP作为访问入口,这样通过访问Service便能访问到相应的Pod,而对访问者来说只需知道Service的 ...
- numpy 数组创建例程
1 numpy.empty empty(shape[, dtype=float, order='C']) 创建指定 shape 和dtype 的未初始化数组 返回:ndarray. 说明:order ...
- 关于varchar(max), nvarchar(max)和varbinary(max)
在MS SQL2005及以上的版本中,加入大值数据类型(varchar(max).nvarchar(max).varbinary(max) ).大值数据类型最多可以存储2^30-1个字节的数据.这几个 ...
- iOS 优秀开源框架 开源包 开发包 from : Podfile of chatsecure ---待完善
前段时间发现chatsecure的podfile中使用了很多非常优秀的开源包 和 大公司的sdk. 拿出来分享下. 各个类库的作用待完善. platform :ios, "7.0" ...
- 在没有创建Provision Profile权限的情况下 发布Enterprise inhouse app 的方法
由于用普通开发者证书,发布的app或ipa没法在普通机器上安装运行,原因是apple限制了普通开发者发布appstore以外的环境中,只有Enterprise企业版证书才能发布inhouse. 今天在 ...