要求tokensecret失踪access token是什么么意思

本文主要是介绍OAuth认证以及各大平台粗略比较,如有纰漏,望请谅解。
转载请注明:&
  Preface:
开发目的及进展
  利用工作上关于SNS网站的研究,将多个SNS平台集成起来,一键分享。利用闲暇时间做了一个demo,还有很多需要改进的地方,请大家多多指教。
  目前基本进展是完成了包括新浪微博、腾讯微博、QQ空间、人人网、开心网、豆瓣网、搜狐微博、网易微博在内的8个国内主要网站的OAuth认证以及简单api的使用。为此我总结成一篇博客,详细分析一下OAuth认证过程的要点,以及几大平台的比较。
  以下是我做的demo的相关UI以及登录各个平台进行认证界面(webview)。
  在分享过程中不可避免的会考虑到用户账户安全性的问题,第三方程序不应该直接接触用户账户信息,但是没有账户信息,又如何取得SNS平台的数据呢?OAuth很好的解决了这个问题,从第三方发起认证过程,在webview或者浏览器中完成认证过程,获得access token来代替账户密码,从而可以获取平台数据。OAUTH协议为用户资源的授权提供了一个安全的、开放而又简易的标准。同时,任何第三方都可以使用OAUTH认证服务,任何服务提供商都可以实现自身的OAUTH认证服务,因而OAUTH是开放的。
国内各平台支持程度
不支持(曾经支持)
最近已经放弃1.0认证。但是1.0的开发文档还是可以学习。
两者都支持,向2.0转变
节操摆一边,文档干净清晰
人人文档很糟糕,用过的都知道
两者都支持,向2.0转变
豆瓣在开发平台方面确实做得不好,看它的文档就一目了然。
文档一般,logo素材太少
文档一般,logo素材丰富
关于开发文档
  文档地址:
  新浪:
  空间:
  腾讯:
  人人:
  开心:
  豆瓣:
  搜狐:
  网易:
  我们在进行开发时最重要的还是看平台的开发文档,而从开发文档也可以看出这个公司或者开发团队的专业程度。以下是我总结的各个平台的优缺之处,也给大家使用开发文档时增加一些帮助。
  首先我觉得一个开放平台开发文档比较重要的几个点:OAuth文档、API文档、SDK、视觉(标示)素材、返回错误码说明这几个方面,当然这是从我现有的开发经验来选择,你可以根据实际情况侧重其他方面进行比较。
  (BTW,8个平台中豆瓣的文档是最简陋的,而且许多接口也没有开放,无SDK,不过整体思路还是清晰的,开发时也不会有太多困惑,因此下面不再提及。)&&
&&&&&& OAuth文档:所有文档中以开心和腾讯微博做的最好,腾讯微博是有清晰示意图,本文也是引用他们的图片,而开心在于每个细节都描述的很清楚,在开发时不会有任何困惑的地方。最差的是人人和搜狐的文档,人人整体还是可以的,但是因为他们对于session key的处理让人很困惑,也不讲清楚,而且文档中有很多地方做的不够好,连请求参数都不列清楚,而搜狐在于他们的OAuth文档居然是外网的链接(包括OAuth官网地址,若干博客地址),既然做了就做完整。为了能够在搜狐认证成功,我最后在API列表中找到接口,在找到参数列表。其他平台的话,新浪稍好一点,其他半斤八两吧。
&&&&&& API文档:包含接口说明、访问权限、请求地址、支持格式、请求方式(POST/GET)、请求参数说明,返回结果(有例子)、字段说明。做的最好的是开心,除了这些说明,还会给出注意事项、调用示例、请求参数细分(api参数、OAuth1.0参数、OAuth2.0参数)。其他平台大同小异,不再赘述。
&&&&&& SDK:其实如果你不想了解OAuth认证以及调用API的细节之处,你完全可以使用它们的SDK。但是也有很多局限性:首先作为Android开发,有些网站不提供AndroidSDK(当然可以使用java SDK代替);其次SDK中很多代码你并不需要使用到(比如人人的支付功能),直接导入SDK包也会造成程序的臃肿;再者,如何我们需要修改SDK的一些功能,阅读SDK代码的代价也是很大的,每个平台的SDK整体结构也是天差地别。这些网站中,新浪、开心、腾讯微博的SDK比较好(后来和facebook的SDK相比较,大家都是各种借鉴啊)。而搜狐最让我伤心,居然什么SDK都没有&&
&&&&&& 视觉素材:搜狐提供的非常稀少,其他平台都有丰富的素材。
   综上:开心网应该是做的比较好,为此我的demo主要是借鉴了它的SDK,给位读者可以去开心网自己下载SDK研究,下面是关于关于OAuth1.0和OAuth2.0的介绍,如果你已经了解,请直接无视吧。
&  Part 1:OAuth 1.0a
OAuth1认证基本步骤:  
获取未授权的Request Token(temporary credentials)
请求用户授权Request Token
使用授权后的Request Token换取Access Token(token credentials)
使用 Access Token 访问或修改受保护资源
  示意图(来自腾讯微博开发文档)
  所有的OAuth请求使用同样的算法来生成(signature base string)签名字符基串和签名。
  base string是把http方法名,请求URL以及请求参数用&字符连起来后做URL Encode编码。具体来讲,base string由http方法名,之后是&,接着是过url编码(url-encoded)之后的url和访问路径及&。接下来,把所有的请求参数包括POST方法体中的参数,经过排序(按参数名进行文本排序,如果参数名有重复则再安参数值进行重复项目排序),使用%3D替代=号,并且使用%26作为每个参数之间的分隔符,拼接成一个字符串。
  示意图(来自腾讯微博开发文档)
private static String generateSignature(String baseString,
String consumerKeySecret, String tokenSecret) {
byte[] byteHMAC = null;
Mac mac = Mac.getInstance("HmacSHA1");
SecretKeyS
String oauthSignature = encode(consumerKeySecret) + "&"
+ ((tokenSecret != null) ? encode(tokenSecret) : "");
spec = new SecretKeySpec(oauthSignature.getBytes(), "HmacSHA1");
mac.init(spec);
byteHMAC = mac.doFinal(baseString.getBytes());
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException ignore) {
// should never happen
return new BASE64Encoder().encode(byteHMAC);
获取未授权的Request Token
  接口地址:
  支持格式:OAuth HTTP 标准认证返回格式
  HTTP请求方式:GET/POST
  是否需要登录:否
  请求参数:
oauth_consumer_key
API Key(组件信息中的API Key值)
oauth_signature_method
签名方法,暂只支持HMAC-SHA1
oauth_signature
签名值,密钥为:API Secret&
oauth_timestamp
时间戳,其值是距:00 GMT的秒数,必须是大于0的整数
oauth_nonce
单次值,随机生成的32位字符串(每次请求必须不同)
oauth_callback
认证成功后浏览器会被重定向到这个url中
oauth_version
版本号,如果填写必须为1.0
以空格分隔的权限列表,若不传递此参数,代表请求默认的basic权限。如需调用扩展权限,必需传递此参数,
  返回参数:
oauth_token
未授权的Request Token
oauth_token_secret
对应的Request Token Secret
oauth_callback_confirmed
对oauth_callback的确认信号 (true/false)
  注:有一些平台不需要输入scope参数,在开发时请参照开发文档。
1    public boolean getRequestToken(Context context, String callbackUrl,
              String[] permissions) throws IOException {
Bundle params = new Bundle();
params.putString("oauth_callback", callbackUrl);
if (permissions != null && permissions.length & 0) {
String scope = TextUtils.join(" ", permissions);
params.putString("scope", scope);
params = Util.generateURLParams(OAUTH1_REQUEST_TOKEN_URL, GET_METHOD,
params, CONSUMER_KEY, CONSUMER_SECRET, null);
String response = Util.openUrl(context, OAUTH1_REQUEST_TOKEN_URL,
GET_METHOD, params, null);
if (response == null) {
return false;
Bundle bundle = Util.decodeUrl(response);
String token = (String) bundle.get(OUATH_TOKEN);
String tokenSecret = (String) bundle.get(OUATH_TOKEN_SECRET);
if (token == null || tokenSecret == null) {
return false;
setRequestToken(token);
setRequestTokenSecret(tokenSecret);
return true;
  接口地址:
  支持格式:OAuth HTTP 标准认证返回格式
  HTTP请求方式:GET/POST
  是否需要登录:否
  请求参数:
oauth_token
上一步中获得的未授权的Request Token
wap/client_type
设置用户认证界面形式,PC还是mobile,参照各自文档
  返回参数:
oauth_token
用户授权之后的Token值,与未授权Token值相同
oauth_verifier
使用授权后的Request Token换取Access Token
  接口地址:
  支持格式:OAuth HTTP 标准认证返回格式
  HTTP请求方式:GET/POST
  是否需要登录:否
  请求参数:
oauth_consumer_key
oauth_token
第一步中获得的Request Token
oauth_signature_method
签名方法,暂只支持HMAC-SHA1
oauth_signature
签名值,(密钥为:API Secret&Request Token Secret)
oauth_timestamp
时间戳, 其值是距:00 GMT的秒数,必须是大于0的整数
oauth_nonce
单次值,随机生成的32位字符串,防止重放攻击(每次请求必须不同)
oauth_verifier
上一步请求授权request token时返回的验证码
oauth_version
版本号,如果填写必须为1.0
  返回参数:
oauth_token
Access Token
oauth_token_secret
Access Token Secre
public boolean getAccessToken(Context context, String requestToken,
String requestTokenSecret, String verifier) throws IOException {
Bundle params = new Bundle();
params.putString(OUATH_TOKEN, requestToken);
if (verifier != null)
params.putString(OUATH_TOKEN_VERIFIER, verifier);
params = Util.generateURLParams(OAUTH1_ACCESS_TOKEN_URL, GET_METHOD,
params, CONSUMER_KEY, CONSUMER_SECRET, requestTokenSecret);
String response = Util.openUrl(context, OAUTH1_ACCESS_TOKEN_URL,
GET_METHOD, params, null);
if (response == null) {
return false;
Bundle bundle = Util.decodeUrl(response);
String token = (String) bundle.get(OUATH_TOKEN);
String tokenSecret = (String) bundle.get(OUATH_TOKEN_SECRET);
if (token == null || tokenSecret == null) {
return false;
setAccessToken(token);
setAccessTokenSecret(tokenSecret);
return true;
  Part 2:OAuth&2.0&
  &OAuth2.0和OAuth1.0的区别还是在于简化了认证过程,不需要从未授权的Request Token转化到授权Request Token,而是利用app key通过用户授权生成access token但是,与1.0的不同之处是access token有自身的有效期,且不同平台、不同级别的程序有着不同的有效期,在程序开发中一定记得判断access token是否过期,对于过期之后的处理方法主要是利用access token和refresh token重新生成access token或者重新利用app key向服务器发送请求生成access token。由于这个问题,与OAuth1.0基本一致不一样,各个平台OAuth2.0做了不一样的选择。
  OAuth2.0服务支持以下获取Access Token的方式:
  a. Authorization Code:Web Server Flow,适用于所有有Server端配合的应用。  b. Implicit Grant:User-Agent Flow,适用于所有无Server端配合的应用。
  因为demo是无服务器的程式,所以我们采用Implicit Grant:User-Agent Flow的获取方式。
  示意图(来自腾讯微博开发文档)
获取Access Token  
  为了获取Access Token,应用需要将用户浏览器(或手机/桌面应用中的浏览器组件)到OAuth2.0授权服务的&http://xxxxxxxxx/authorize&地址上,并带上以下参数:
申请组件时获得的API Key
response_type
此值固定为&token&
redirect_uri
授权后要回调的URI,即接受code的URI。对于无Web Server的应用,其值可以是&oob&。
以空格分隔的权限列表,若不传递此参数,代表请求默认的basic权限。如需调用扩展权限,必需传递此参数
用于保持请求和回调的状态,授权服务器在回调时(重定向用户浏览器到&redirect_uri&时),会在Query Parameter中原样回传该参数
登录和授权页面的展现样式,默认为&page&。手机访问时,此参数无效
是否为手机访问。手机访问:client=1;不是手机,无需次参数
  若用户登录并接受授权,授权服务将重定向用户浏览器到&redirect_uri&,并在Fragment中追加如下参数:
access_token
要获取的Access Token
expires_in
Access Token的有效期,以秒为单位
refresh_token
用于刷新Access Token 的 Refresh Token
一些平台不返回这个参数,需要程序员进行判断处理
Access Token最终的访问范围,即用户实际授予的权限列表
如果请求获取Access Token时带有state参数,则将该参数原样返回
人人网和QQ空间的后续操作
  人人网获得access token还需要获得session key和session secret,然后再调用api接口的时候利用app key、session key以及sig(签名认证,),最近人人说可以使用access token来替换app key和session key的组合,貌似不需要session key,但是sig参数又需要通过session key才能获得,真是多此一举。
1 public void getRenrenSessionKey(Context context, String accessToken) {
if (accessToken == null || accessToken.length() & 1) {
Bundle params = new Bundle();
params.putString("oauth_token", accessToken);
String sk = Util.openUrl(
"/renren_api/session_key", "POST",
JSONObject obj = new JSONObject(sk);
String error = obj.optString("error", null);
if (error != null) {
throw new SNSAuthError(obj.toString(), null, null);
String sessionKey = obj.getJSONObject("renren_token").getString(
"session_key");
String sessionSecret = obj.getJSONObject("renren_token").getString(
"session_secret");
long uid = obj.getJSONObject("user").getLong("id");
// 服务器返回的过期时间单位为秒,故乘以1000
long expires = obj.getJSONObject("renren_token").getLong(
"expires_in") * 1000;
long current = System.currentTimeMillis();
long expireTime = current +
setSeeionKey(sessionKey);
setSeeionSecret(sessionSecret);
setSeeionExpires(expireTime);
Log.i(Util.LOG_TAG, "---login success sessionKey:" + sessionKey
+ " expires:" + expires + " sessionSecret:" + sessionSecret
+ " uid:" + uid);
} catch (JSONException e) {
throw new RuntimeException(e.getMessage(), e);
  QQ空间没有人人网这么麻烦,只是在返回参数中多了一个openId参数,这个参数在调用api接口是需要传入,除此之外没什么特殊之处,openid估计是为了他们平台的统一性设计的,无大碍。
1 public void getQzoneOpenId(Context context, String accessToken) {
if (accessToken == null || accessToken.length() & 1) {
Bundle params = new Bundle();
params.putString("access_token", accessToken);
String open = Util.openUrl("https://graph./moc2/me", "GET", params);
String[] param = open.split("&");
String[] openid = param[1].split("=");
setOpendId(openid[1]);
  Summary
&  OAuth认证其实很简单,调用api也是根据各个平台进行些许的调整而已,在进行开发的过程更细心的一点应该没什么问题,如果你有问题,欢迎大家来交流。关于代码的问题,大家把平台上相关的SDK下载下来稍微研究一下就可以了,本人是利用开心网的SDK修改的,新浪和腾讯的都不错,以上信息,仅作参考,如有错误之处,望指正!谢谢!
  过段时间在完成《国外篇》,流程类似,主要还是介绍各自特点吧,OAuth不再赘述。
阅读(...) 评论()获取四大微博的AccessToken和AccessTokenSecret - 下载频道
- CSDN.NET
&&&&获取四大微博的AccessToken和AccessTokenSecret
获取四大微博的AccessToken和AccessTokenSecret
获取四大微博的AccessToken和AccessTokenSecret获取四大微博的AccessToken和AccessTokenSecret
若举报审核通过,可奖励20下载分
被举报人:
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:
您可能还需要
开发技术下载排行OAuth授权验证说明
OAuth授权验证说明
1.1. OAuth介绍
&&&&&&OAuth (开放授权) 是一个开放标准,允许用户授权第三方网站访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方网站或分享他们数据的所有内容。为了保护凡客用户的数据,所有第三方应用都需要通过OAuth认证机制来获得用户的授权。本文档提供了凡客开放平台OAuth认证的相关信息。
&&&&&&凡客开放平台API采用OAuth协议为第三方提供接入服务,有关OAuth认证的详细说明,请阅读官方OAuth规范。
&&&&&&-OAuth标准(英文) http://oauth.net/
&&&&&&-OAuth维基百科(中文) http://zh.wikipedia.org/zh/OAuth
&&&&&&凡客开放平台API使用OAuth 1.0a版本。
&&&&&&Web应用、桌面应用和手机应用如何通过凡客开放平台服务器认证这一过程就是OAuth协议的主要内容。这一过程中可以抽象出三个角色:Server(Service Provider),Client(Consumer), User(Resource Owner)。在凡客开放平台中,这三个的角色(实例化后)是: 凡客开放平台服务端,第三方应用,凡客用户。
1.2. 使用说明
&&&&&&为了使用凡客开放平台提供的API(应用程序接口),我们会给每一个应用一个专属的oauth_consumer_key和oauth_consumer_ Secret。
&&&&&&OAuth的登录认证流程及访问资源流程
&&&&&&OAuth的注册认证流程及访问资源流程
&&&&&&OAuth定义的认证过程分三步:
&&&&&&1. Client从server获取未授权的RequestToken
&&&&&&2. User授权Client获取的RequestToken,client获取oauth_verifier (授权码)
&&&&&&3. Client以RequestToken和oauth_verifier从server获取AccessToken,AccessTokenSecret,UserId,UserToken
在此过程中RequestToken是一个临时性的东西。完成这三步后,RequestToken就失去价值了。另外RequestToken在一段时间内没有使用,也会过期从而失效。而AccessToken是一个持久性的东西,它是user对client的授权凭证,会一直有效。Client只需要保存UserId,AccessToken(即oauth_token),AccessTokenSecret(即oauth_token_secret),其中UserId,AccessToken两个参数是访问需要用户登录授权API所需要传入的参数值,而AccessTokenSecret是访问需要用户登录授权API签名时需要的值。
&&&&&&4、使用UserId,AccessToken访问或修改受保护,需要用户登录授权的API。
&&&&&&认证过程中第一步和第三步发送的请求是需要签名的。
请求签名说明
&&&&&&所有请求和受保护的资源请求必须被签名。签名算法使用Signature Base String和密钥(Secret)生成签名。
&&&&&&Signature Base String由以下三部分组成,各项之间使用&符号分隔。
&&&&&&1、Http Method
&&&&&&请求方法,GET/POST
&&&&&&2、URL Encode之后的请求URL(URL要小写)
&&&&&&例如:
&&&&&&请求URL:/oauthnew/request-token.ashx
&&&&&&经URL Encode之后的请求URL为:
&&&&&&http%3A%2F%2F %2Foauthnew%2Frequest-token.ashx
&&&&&&3、URL Encode并排序之后的请求参数
&&&&&&例如: URL请求参数为:
&&&&&&oauth_callback=http%3A%2F%2Flocalhost%3A60001%2FDemoWeb%2Fdemo.aspx&oauth_consumer_key=de47eaac845&oauth_nonce=3c7fa628eba2f&oauth_signature_method=HMAC-SHA1&oauth_timestamp=&oauth_version=1.0
&&&&&&经URL Encode并排序(如果参数名有重复则再按参数值进行重复项目排序)之后的请求参数格式如下(使用%3D替代=号,参数间使用%26(即&符号)分隔):
&&&&&&oauth_callback%3Dhttp%253A%252F%252Flocalhost%253AFDemoWeb%252Fdemo.aspx%26oauth_consumer_key%3Dde47eaac845%26oauth_nonce%3D3c7fa628eba2f%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D%26oauth_version%3D1.0
&&&&&&三部分拼接后即为Signature Base String的值,如下:
&&&&&&GET&http%3A%2F%%2Foauthnew%2Frequest-token.ashx&oauth_callback%3Dhttp%253A%252F%252Flocalhost%253AFDemoWeb%252Fdemo.aspx%26oauth_consumer_key%3Dde47eaac845%26oauth_nonce%3D3c7fa628eba2f%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D%26oauth_version%3D1.0
&&&&&&密钥由oauth_consumer_secret和Request Token Secret组成(中间使用&符号分隔)。
&&&&&&第一步签名密钥为:oauth_consumer_
&&&&&&第三步签名密钥为:oauth_consumer_secret &Request Token S
1.3. OAuth认证流程简介
1.3.1. 获取未授权的request token
&&&&&&获取request token是进行用户认证的第一步。这一步主要有两个目的:
&&&&&&第一,告诉凡客开放平台你将要做什么
&&&&&&第二,告诉凡客开放平台你在callback里要做什么
&&&&&&app发送HTTP GET请求到/oauthnew/request-token.ashx获取request_token
此时,app所拥有的信息只有: oauth_consumer_key和oauth_consumer_secret。oauth_consumer_key是app的唯一标识。要想去凡客开放平台服务器请求token,必须告诉它是谁在请求,所以这个参数必须传递给服务器。oauth_consumer_secret是凡客开放平台为每个app分配的用以进行机密数据交换的密钥。(这是一个保密项,不要公开否则别人可能会冒你的名去发送请求),oauth_consumer_secret主要用来进行数据签名。
&&&&&&请求参数
oauth_consumer_key
凡客开放平台分配的应用的唯一KEY标记
oauth_signature_method
签名方法, HMAC-SHA1 (固定)
oauth_signature
签名值,密钥为:oauth_consumer_secret。计算说明。
oauth_timestamp
时间戳, 其值是距:00 GMT的秒数,必须是大于0的整数
oauth_nonce
单次值,随机生成的32位字符串,防止重放攻击(每次请求必须不同)
oauth_callback
认证成功后浏览器会被重定向到这个url中
oauth_version
版本号, “1.0” (固定)
oauth_token
未授权的Request Token
oauth_token_secret
对应的Request Token Secret
oauth_callback_confirmed
对oauth_callback的确认信号, 为true表示回调地址生效
&&&&&&说明:
&&&&&&用户授权后web应用将会重定向到oauth_callback,此url必须以http://开头。
&&&&&&时间戳与标准时间偏差不得大于8分钟。
&&&&&&假如有一款应用:
&&&&&&oauth_consumer_key = “f3cc9b8b1a6b94”
&&&&&&oauth_consumer_secret = “3a58dd9023cf1adec08f0656acc5bf95”
&&&&&&示例
&&&&&&请求参数:
oauth_consumer_key
f3cc9b8b1a6b94
oauth_signature
oauth_signature为"7M1b9CG32KsclajAVXrHzPdE238="URI编码后为"7M1b9CG32KsclajAVXrHzPdE238%3d
oauth_nonce
774d4d2fb95a49628bbd109a
oauth_timestamp
oauth_signature_method
oauth_version
oauth_callback
http%3A%2F%2Flocalhost%3A60001%2FDemoWeb%2Fdemo.aspx
Base string的生成
Base String
GET&http%3A%2F%%2Foauthnew%2Frequest-token.ashx&oauth_callback%3Dhttp%253A%252F%252Flocalhost%253AFDemoWeb%252Fdemo.aspx%26oauth_consumer_key%3Df3cc9b8b1a6b94%26oauth_nonce%3D774d4d2fb95a49628bbd109aoauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D%26oauth_version%3D1.0
使用signing key(oauth_consumer_secret后加一个&符)生成oauth_signature:
7M1b9CG32KsclajAVXrHzPdE238%3d
oauth_token
1a6b213f81ef48b4b94524c2cfff50d0
oauth_token_secret
2c52baef21e01635ab67
oauth_callback_confirmed
&&&&&&请求格式如下:
&&&&&&/oauthnew/request-token.ashx?oauth_callback=http%3A%2F%2Flocalhost%3A60001%2FDemoWeb%2Fdemo.aspx&oauth_consumer_key=f3cc9b8b1a6b94&oauth_nonce=774d4d2fb95a49628bbd109a&oauth_signature_method=HMAC-SHA1&oauth_timestamp=&oauth_version=1.0&oauth_signature=7M1b9CG32KsclajAVXrHzPdE238%3d
&&&&&&当服务器端接到请求之后,会返回包含oauth_token,oauth_token_secret,oauth_callback_confirmed等内容,另外oauth_callback_confirmed字段如果为true就表示callback生效。
&&&&&&服务器端的响应如下:
&&&&&&oauth_token=1a6b213f81ef48b4b94524c2cfff50d0&oauth_token_secret=2c52baef21e01635ab67&oauth_callback_confirmed=true
&&&&&&此时返回的oauth_token即为RequestToken, oauth_token_secret即为RequestTokenSecret。这时需要将oauth_token和oauth_token_secret记下,我们需要用这个参数来获取access token。
1.3.2. 用户授权认证
&&&&&&app发送HTTP GET请求到/oauthnew/authorize.aspx获取授权码(oauth_verifier)。(说明:如果是注册,则请求地址为/oauthnew/UserRegister.aspx,其他与oauth登录认证方式完全一样)要求必须以oauth_token作为参数,一般来说请求格式如下:
&&&&&&/oauthnew/authorize.aspx?oauth_token=1a6b213f81ef48b4b94524c2cfff50d0
oauth_token
上一步中获得的未授权的Request Token
oauth_token
用户授权之后的Token值, 与未授权Token值相同
oauth_verifier
签名值,方便第三方来验证来源的可靠性
oauth_token
1a6b213f81ef48b4b94524c2cfff50d0
oauth_token
1a6b213f81ef48b4b94524c2cfff50d0
oauth_verifier
NlbRvOzRqxWzarCpdq8xgA==
&&&&&&说明:
&&&&&&①此页面中会要求用户登陆凡客,然后选择同意或者拒绝对应用授权。
&&&&&&②授权成功后:
&&&&&&web应用会重定向到oauth_callback所指定的URL(其中包含oauth_token和oauth_verifier)。
客户端应用(oauth_callback=null)会在网页中给出授权码,用户需要手工将验证码输入到应用中才能完成授权流程。
&&&&&&oauth_callback用来登录成功后,回调到第三方应用的页面。回调后, oauth_callback应该已经接到返回的信息,其中包含oauth_token和oauth_verifier。样例如下:
oauth_token=1a6b213f81ef48b4b94524c2cfff50d0&oauth_verifier=NlbRvOzRqxWzarCpdq8xgA==
1.3.3. 获取access token
&&&&&&app发送HTTP GET请求到/oauthnew/access-token.ashx获取access_token
oauth_consumer_key
应用的唯一KEY标记
oauth_token
第一步中获得的Request Token
oauth_signature_method
签名方法,暂只支持HMAC-SHA1
oauth_signature
签名值,密钥为:oauth_consumer_secret &Request Token Secret。
oauth_timestamp
时间戳, 其值是距:00 GMT的秒数,必须是大于0的整数
oauth_nonce
单次值,随机生成的32位字符串,防止重放攻击(每次请求必须不同)
oauth_verifier
上一步请求授权request token时返回的授权码
oauth_version
版本号,必须为“1.0”
返回参数:
oauth_token
具有访问权限的token(Access token)
oauth_token_secret
Access token的密钥
请求参数:
oauth_consumer_key
f3cc9b8b1a6b94
oauth_token
1a6b213f81ef48b4b94524c2cfff50d0
oauth_signature
BhZMohRRgjFrWBRi6qL993XuGXQ%3d
oauth_nonce
9ae3a3bc8d
oauth_timestamp
oauth_signature_method
oauth_version
oauth_verifier
NlbRvOzRqxWzarCpdq8xgA==
Base string的生成
Base String
GET&http%3A%2F%%2Foauthnew%2Faccess-token.ashx&oauth_consumer_key%3Df3cc9b8b1a6b94%26oauth_nonce%3D9ae3a3bc8d%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D%26oauth_token%3D1a6b213f81ef48b4b94524c2cfff50d0%26oauth_verifier%3DNLBRVOZRQXWZARCPDQ8XGA%253D%253D%26oauth_version%3D1.0
使用signing key(Consumer Secret和Request Token Secret中间使用&分隔)生成oauth_signature:
signing key
3a58dd9023cf1adec08f0656acc5bf95&2c52baef21e01635ab67
BhZMohRRgjFrWBRi6qL993XuGXQ%3d
oauth_token
22d9af8daddf7e4c3092470c
oauth_token_secret
a01f08a98c734eb6c8a42d20
e8f45cadbb78bc369cbdbb
&&&&&&请求格式为:
&&&&&&/oauthnew/access-token.ashx?oauth_consumer_key=f3cc9b8b1a6b94&oauth_nonce=9ae3a3bc8d&oauth_signature_method=HMAC-SHA1&oauth_timestamp=&oauth_token=1a6b213f81ef48b4b94524c2cfff50d0&oauth_verifier=NLBRVOZRQXWZARCPDQ8XGA%3D%3D&oauth_version=1.0&oauth_signature=BhZMohRRgjFrWBRi6qL993XuGXQ%3d
&&&&&&凡客开放平台会返回应用需要的信息,包括
UserId,UserToken,oauth_token,oauth_token_secret(当然这里就是AccessToken与AccessTokenSecret了)。 response内容如下:
&&&&&&oauth_token=22d9af8daddf7e4c3092470c&oauth_token_secret=a01f08a98c734eb6c8a42d20&user_id=&
UserToken=e8f45cadbb78bc369cbdbb
&&&&&&现在就可以使用UserId,oauth_token,oauth_token_secret来访问服务端API啦。}

我要回帖

更多关于 appsecret是什么 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信