oauth简介

转自 : http://www.minroad.com/?p=351

 

oauth简介   


貌似现在一接触到网络客户端编程,第一个要解决的 问题就是oauth/xauth,那么就先从这个说起。

再好的某个sns网站的库,我感觉都没有自己封装的用的顺,所以以下的 代码主要介绍google  code上的oauth库( http://oauth.googlecode.com/svn/code/obj-c/),并对各大网站做一些简单的介绍。

oauth与xauth的具体原理就不多说了,纯理论,xauth相当于oauth的简化版,省去了oauth中的前2步(3个api中的前2个,获取未授权的token及跳转到网站登录)。

先主要介绍几个类:(从 http://oauth.googlecode.com/svn/code/obj-c/下载)

OAAsynchronousDataFetcher,OADataFetcher 这2个类是关于nsurlconnection的封装。

OAConsumer其实就是将 app key和app secret做的MVC中的M

OAToken与OAConsumer类似,只不过是token相关的(oauth认证中未授权,已授权的token)

OAHMAC_SHA1SignatureProvider 加密算法

OARequestParameter 主要是在http方法为POST的时候添加POST参数用的,我一般用[hmacSha1Request setOAuthParameterName:key withValue:value];代替

OAAsynchronousDataFetcher,OADataFetcher我建议 使用异步的,因为做url取消,ssl认证都必须使用异步的(之前同步的可以用私有api,现在被 苹果干掉了)。

下面主要介绍一下如何使用这些类

OAConsumer *consumer = [[OAConsumer alloc] initWithKey:sinaAPPKEY secret:sinaAPPSECRET];

这个永远是固定的,把2个参数换成申请sns app时获得的。在之后永远是这个。

创建一个request

加密方法也是固定的(如果一直使用Sha1),如果是第一次访问,那么是没有token的,所以传NULL就可以。获得时间戳和随机字符串的方法在OAMutableURLRequest类中

OAHMAC_SHA1SignatureProvider *hmacSha1Provider = [[OAHMAC_SHA1SignatureProvider alloc] init];

OAMutableURLRequest *hmacSha1Request = [[OAMutableURLRequest alloc] initWithURL:[NSURL URLWithString:RequestURL]

consumer:consumer

token:NULL

realm:NULL

signatureProvider:hmacSha1Provider

nonce:[self _generateNonce]

times*****p:[self _generateTimes*****p]];

发送请求

OAAsynchronousDataFetcher *loginFetcher =

[[OAAsynchronousDataFetcher alloc] initWithRequest:request

delegate:self

didFinishSelector:@selector(requestTokenTicket:finishedWithData:)

didFailSelector:@selector(requestTokenTicket:failedWithError:)];

[loginFetcher start];

这时就可以等待selector返回数据,然后token就可以

NSString *responseBody = [[NSString alloc] initWithData:data

encoding:NSUTF8StringEncoding];

OAToken *token = [[OAToken alloc] initWithHTTPResponseBody:responseBody];

这样获得。

然后就是讲如何区别POST和GET,并传参。

GET好说,直接在URL后面拼接。

而POST,就像我之前说的2种方法

[hmacSha1Request setOAuthParameterName:key withValue:value];



[hmacSha1Request setParameters:[NSArray arrayWithObjects:[[OARequestParameter alloc] initWithName:key value:value],nil]];

上传 图片的时候会遇到“图片不参于加密”类似的 提示,那么这时候你就只要先生成request,之后把pic data setHTTPBody一下就可以了。(pic data我是用的模拟http的方法,不知直接传data有用不)

现在区别一下各大sns认证的不同(主要在于回调URL)

douban,sina的回调URL是在获得了未授权的token之后,跳转到网页的URL以get的方式传过去的oauth_callback
sina特有oauth_verifier,该加的时候别忘了加上,否则会提示加密错误。

而twitter则在第一次获取未授权的token的request上添加POST参数oauth_callback

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。、可私 6信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 、可私信6博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 、可私信6博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值