oauth1.0 java的实现(附代码)

最近再做毕业设计,需要用到OAuth1.0协议。

首先,简单说一下什么是OAuth协议。

OAuth是一个开放授权协议,允许第三方应用访问服务提供方中注册的终端用户的某些资源,且不会把帐号和密码提供给第三方。

OAuth允许通过服务提供商授予的一个临时令牌而不是用户名密码来获取用户的资源,这些资源可以是受限的,令牌的时间段也可以是受限的。

简单的说,OAuth就是用来对第三方进行认证,允许第三方获取用户资源。

OAuth的授权流程

你所开发的应用需要流程如下:

    向应用服务商(新浪、搜狐等微博,开心网,豆瓣等)请求request_token。得到request_token后重定向用户到服务商的授权页面。如果用户选择授权你得应用,用request_token向服务商请求换取access_token。得到access_token等信息访问受限资源。

而服务商相应的响应如下:

    创建request_token返回给应用。询问用户是否授权此应用。如果用户授权重定向用户至应用页面。创建access_token并返回给应用。响应受限资源请求并返回相关信息。

通俗点的说法就是“你拿着你得身份证明(request_token)向服务商申请进入用户家的门钥匙(access_token),服务商询问用户同不同意,如果用户同意服务商就给你进入用户家门的钥匙(access_token),拿到钥匙后你就可以进到用户家里”。

下面最关键的来了!!!!!怎么用java来实现它!

第一步:注册应用。我毕业设计做的是withings的OAuth,所以我就要去它的网站上注册应用,这样我们就有了开发应用的权利。注册成功后就会获得oauth_consumer_key 和consumer_secret 两个参数,保留好,后面要用到。如果大家要做其他平台的OAuth,自己就要去相应的网站去申请Key。比如新浪微博去新浪开放平台,开心网去开心网开放平台等等。申请过程大家可以到开放平台上看一看很简单。

其中需要注意下面三个请求地址(这些地址任何一个提供OAuth的服务商都会提供给你,看下API文档就会找到):

requst_token_url —— 第2步中的请求地址authorize_url —— 第2步的请求地址access_token_url —— 第4步的请求地址

第二步:获取Request_token

首先得准备一下参数及其来源:

oauth_consumer_key —— 注册应用后由应用服务商提供consumer_secret ——注册应用后由应用服务商提供oauth_callback —— 用户授权后的返回地址,可以为空oauth_nonce —— 随机字符串,须保证每次都不同oauth_timestamp —— 时间戳oauth_signature_method —— 签名base string 的方法,目前支持HMAC-SHA1oauth_version —— Oauth协议版本,这里是1.0

接下来,有了这些参数就可以组装base string了。准备base string的目的就是为了得到oauth_signature 这个参数,这个参数向服务商发送请求的时候需要用到。有了base string就可以签名生成oauth_signature这个参数,oauth_signature会在请求request_token的时候用到。

得到oauth_signature后就要开始向requst_token_url 发送请求了,OAuth规范定义了三种传递OAuth参数方式:

    httpheader中url中post form中

根据官方文档看是哪种。新浪Httpheader可用,网易Httpheader可用,腾讯只支持在url,搜狐由于没有appkey所以还没去尝试。

请求发送成功后就会得到的响应如下:

oauth_token=8ldIZyxQeVrFZXFOZH5tAwj6vzJYuLQpl0WUEYtWc&oauth_token_secret=x6qpRnlEmW9JbQn4PQVVeVG8ZLPEx6A0TOebgwcuA&oauth_callback_confirmed=true

可以看到响应里面已经包含oauth_token和oauth_token_secret了,存贮之以备后面使用。

第三步:用户认证,请求authorize_url

拿到了oauth_token之后就需要用户对此oauth_token授权,也即对你的应用授权,具体做法就是发送oauth_token到服务商并请求用户对此oauth_token授权。

这是用户就被带到了应用授权页面,并可以选择是否对该应用授权。如果用户授权之后就会被带到oauth_callback 地址,这时候我们的oauth_token已经获得用户的授权了。

第四步:请求access_token_url,用oauth_token换取access_token

这一步跟第一步“获取Request_token”基本相同,也是需要准备 base string 对其签名,然后发送请求。可以参考第二步的实现:但是相应的参数有所不用。

下来需要向access_token_url发送请求,请求参数包括base string 里的除了请求方法(POST或GET)和请求地址外的所有参数及其值和签名后生成的oauth_signature。

请求成功会服务商就会返回oauth_token和oaut_token_secret,这里的oauth_token和oaut_token_secret就是真正访问资源要用的access_token。

以上这么多步骤好难办怎么办,google上已经有大神写好了一些资源,你可以拿来用!

oauth_signpost

网址:http://code.google.com/p/oauth-signpost/

里面有个example code,如下图。里面有四个小项目,封装好了。自己改下三个url,和consumer key还有consumer key secret就可以用啦。

源代码也可以下载,如下图

这样也可以看源代码。别人有了咱们借鉴拿来用就好了,毕竟做项目时间紧啊!!!

本人亲测,可以使用哦

我的代码:http://download.csdn.net/detail/u014163625/7166605

不要再以任何人说你,因为你不是为任何人而活,你只为自己而活,

oauth1.0 java的实现(附代码)

相关文章:

你感兴趣的文章:

标签云: