现在的位置: 首页 > 综合 > 正文

[SNS]Twitter

2017年09月19日 ⁄ 综合 ⁄ 共 9665字 ⁄ 字号 评论关闭
文章目录

https://dev.twitter.com/docs/auth/oauth

Edit

OAuth

Edit

发送安全认证请求

Twitter使用OAuth来提供API的认证访问

Edit

特性

安全-用户不需要向第三方应用程序分享他们的密码,增强了帐户的安全性。
标准-丰富的客户端库和例子代码适合Twitter的OAtuth实现。

Edit

API v1.1的认证模型

新模型中有两种认证形式,并且仍旧可以在OAuth1.0A中使用

应用程序-用户认证
这是Twitter OAuth1.0A中最普遍的资源认证方式。你对你的应用程序身份和最终用户的API调用权限两方面进行签名认证,表现为用户的访问令牌(AccessToken)

应用程序认证
这种形式的认证不再被支持。

Edit

使用OAuth

Edit

介绍

理解OAuth工作的方法可以在使用TwitterAPI进行创建时有所帮助。使用OAuth,应用程序必须:
通过用户帐户的操作,取得AccessToken
认证全部发往TwitterAPI的http请求

Edit

客户端库

更多的开发者不需要操作OAuth的细节部分,因为Twitter客户端库已经实现了该协议。
参考:https://dev.twitter.com/docs/twitter-libraries

Edit

认证请求

Edit

概述

这份文档的目的展示了如何修改http请求来实现向TwitterAPI发送认证过的请求

所有的TwitterAPI都机遇HTTP协议。这意味着你编写的任何访问TwitterAPI的软件,都会发送一系列结构化的信息到Twitter服务器。比如,一个请求发送了推特信息“Hello Ladies + Gentlemen,a signed OAuth request!”,结构会像下面的样子

POST /1/statuses/update.json?include_entities=true HTTP/1.1
Accept: */*
Connection: close
User-Agent: OAuth gem v0.4.4
Content-Type: application/x-www-form-urlencoded
Content-Length: 76
Host: api.twitter.com

status=Hello%20Ladies%20%2b%20Gentlemen%2c%20a%20signed%20OAuth%20request%21

任何HTTP库都应该可以以最小的代价,生成和发出上面的请求。然而,上面的请求是欠考虑的,因为无法知道:
1.哪个应用程序生成的请求
2。哪个用户发送请求
3。是否用户授权应用程序权限,去发送用户的请求
4.是否请求在交互时被第三方篡改

为了让应用程序提供这些信息,TwitterAPI依赖于OAuth1.0a协议。以一个非常简单的方式,Twitter的实现要求上面问题提出的问题所涉及的认证信息,包含在HTTP认证头中。根据上面的HTTP请求,包含头信息的修改后的样子如下(通常验证头信息应该在一行中,但是为了易读性进行了换行)

POST /1/statuses/update.json?include_entities=true HTTP/1.1
Accept: */*
Connection: close
User-Agent: OAuth gem v0.4.4
Content-Type: application/x-www-form-urlencoded
Authorization:
OAuth oauth_consumer_key="xvz1evFS4wEEPTGEFPHBog",
oauth_nonce="kYjzVBB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4cg",
oauth_signature="tnnArxj06cWHq44gCs1OSKk%2FjLY%3D",
oauth_signature_method="HMAC-SHA1",
oauth_timestamp="1318622958",
oauth_token="370773112-GmHxMAgYyLbNEtIKZeRNFsMKPR9EyMZeS9weJAEb",
oauth_version="1.0"
Content-Length: 76
Host: api.twitter.com

status=Hello%20Ladies%20%2b%20Gentlemen%2c%20a%20signed%20OAuth%20request%21

Edit

收集参数

你应该可以看到头信息中包含7对键值,所有的键名以“oauth_”开头。任何TwitterAPI请求,都会收集这7组值,并且创建一个相似的头信息,允许你为该请求指定认证信息。每一个值描述如下:

Edit

Consumer key

oauth_consumer_key 标识哪一个应用程序生成请求。可以在应用程序管理界面dev.twitter.com/apps 获得这个值

Edit

Nonce

oauth_nonce参数是一个唯一的token值,应用程序应该为每一个请求生成它。Twitter会使用这个直来判断是否一个请求被提交了多次。这个值以32字节随机数据进行base64编码生成,并且剔除所有非文字字符,但是任何方式生成相对随机数的字符串都可以被接受。

Edit

Signature

oauth_signature参数包含一个值,该值以其他所有的请求参数和两个密码值进行签名算法生成。
目的是Twitter可以判断请求在传输中没有被篡改,验证应用程序发送的请求,验证应用程序具有和用户帐户交互的权限。
运算oauth_signature的过程参考:https://dev.twitter.com/docs/auth/creating-signature

Edit

Signature method

Twitter使用的oauth_signature_method是HMAC-SHA1。该值应该在所有的验证过的请求中发送格Twitter API

Edit

Timestamp

oauth_timestamp参数标识请求何时被创建。这个值应该是从Unix纪元到请求被生成时点的秒数,在大多数的编程语言中都很好实现。Twitter会拒绝太久之前的请求,所以保证生成请求的计算机时钟正确很重要。

Edit

Token

oauth_token参数通常代表用户许可应用程序访问他们的帐户。
有一些认证请求不需要传递这个值或者使用不同形式的token,这些情况的详细参考:https://dev.twitter.com/docs/auth/obtaining-access-tokens。
更多通常目的的请求,你应该使用access token。
你可以在你的应用程序管理界面dev.twitter.com/apps ,为你的帐号生成一个有效的access token

Edit

Version

oauth_version参数应该一直是1.0。

Edit

创建头信息字符串

为了创建头信息字符串,设想向一个名为DST的字符串进行输出。
1.追加字符串"OAuth "(包含最后的空格)到DST。
2.对7组中的每一组键值对进行:
1.对键名进行Percent encode (https://dev.twitter.com/docs/auth/percent-encoding-parameters)并追加到DST
2.追加等于号字符“=”到DST
3.追加一个双引号字符“ 到DST
4.Percent encode 值,并且追加到DST
5.追加一个双引号 “ 到DST
6.如果还有键值对没有被处理,追加逗号 , 和 空格 到DST

Edit

获取access token

为了进行认证调用Twitter API,你的应用程序必须首先获得OAuth access token。取得token的方式取决于你的用例。
想要提供一个“Sign in with Twitter”按钮在你的网站上:https://dev.twitter.com/docs/auth/implementing-sign-twitter
想要代表访问你网站的访客,读取或者发送Twitter数据:https://dev.twitter.com/docs/auth/3-legged-authorization
有一个手机或者桌面或者嵌入式的,不可以访问浏览器的应用程序时:https://dev.twitter.com/docs/auth/pin-based-authorization
只是想用你自己的帐户访问API时:https://dev.twitter.com/docs/auth/tokens-devtwittercom
需要使用用户名/密码,并且可以使用xAuth时:https://dev.twitter.com/docs/oauth/xauth
提供一个API,客户端可以代替Twitter用户发送数据:https://dev.twitter.com/docs/auth/oauth/oauth-echo
拥有ios5集成,并且需要access token进行服务器端集成:https://dev.twitter.com/docs/ios/using-reverse-auth

Edit

OAuth Echo
(https://dev.twitter.com/docs/auth/oauth/oauth-echo)

OAuth Echo是当和API交互时,保证OAuth和第三方认证进行认证的方案。在Twitter生态系统中,我门使用OAuth Echo意味着允许你的应用程序使用诸如Twipic(http://twitpic.com/)和yfrog的应用。
OAuth Echo仍旧是OAuth。OAuth Echo不需要xAuth(不要让那些x_*的都信息蒙蔽你,那些只是定义自定义HTTP头信息的标准方式)。

在这种交互中有4个部分:
用户:使用Twitter的具体用户和验证过的Twitter应用
消费者:或者说是Twitter应用程序,尝试去和第三方媒体提供商进行交互。
委托方:或者说是第三方的媒体提供商。
服务提供商:Twitter本身。

本质上,你需要为发送给TwitterAPI的委托方准备个请求。// TODO

Edit

Implementing Sign in with Twitter
//TODO

https://dev.twitter.com/docs/auth/implementing-sign-twitter

Edit

实现Twiter的登录

Edit

概述

基于OAuth的浏览器和手机网络实现Twitter的登录。下文演示了如何让请求获得一个有标记的访问令牌的流程。对于如何登陆Twitter的iOS版本的详细信息,请参阅:https://dev.twitter.com/docs/ios

此页面功能实现的前提是读者已经知道如何使用oauth 1.0协议的请求。如果不了解协议的请求及注册,请参阅:https://dev.twitter.com/docs/auth/authorizing-request

Edit

第一步.获得一个请求令牌

在开始登录之前,你的应用程序必须通过发送给
POST oauth/request_token
一个签名的消息来获得一个请求令牌。这个请求中唯一的参数是oauth_callback,它必须是一个URL格式的URL,你希望你的用户在完成第二步时会被重新定向,且剩余的参数在OAuth签名过程中会被定义。

请求示例(授权的开头已被封装):

POST /oauth/request_token HTTP/1.1
User-Agent: themattharris' HTTP Client
Host: api.twitter.com
Accept: */*
Authorization: 
        OAuth oauth_callback="http%3A%2F%2Flocalhost%2Fsign-in-with-twitter%2F",
              oauth_consumer_key="cChZNFj6T5R0TigYB9yd1w",
              oauth_nonce="ea9ec8429b68d6b77cd5600adbbb0456",
              oauth_signature="F1Li3tvehgcraF8DMJ7OyxO4w9Y%3D",
              oauth_signature_method="HMAC-SHA1",
              oauth_timestamp="1318467427",
              oauth_version="1.0" 

应用程序会检查响应HTTP的状态。任何大于200的值都会导致失败。响应的部分包括:oauth_token, oauth_token_secret, and oauth_callback_confirmed等参数。应用程序应该确认oauth_callback_confirmed值为真而且存储有其他两个下一步的值。

响应示例(请求部分已被封装):

HTTP/1.1 200 OK
Date: Thu, 13 Oct 2011 00:57:06 GMT
Status: 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 146
Pragma: no-cache
Expires: Tue, 31 Mar 1981 05:00:00 GMT
Cache-Control: no-cache, no-store, must-revalidate, pre-check=0, post-check=0
Vary: Accept-Encoding
Server: tfe

oauth_token=NPcudxy0yU5T3tBzho7iCotZ3cnetKwcTIRlX0iwRl0&
oauth_token_secret=veNRnAWe6inFuo8o2u8SLLZLjolYDmDP7SzL0YfYI&
oauth_callback_confirmed=true
Edit

第二步.重定向用户

这一步直接让用户连接到twitter以便他们可以按照正确的流程完成登录。用户直接获取获取OAuth /authenticate ,然后传递步骤1中获得的令牌oauth_token参数。

对一个网站的来说最无缝的方式来实现这一点的就是发出一个HTTP 302来重定向到原来的“登录”请求的响应。手机应用会打开一个浏览器窗口或者直接通过内嵌的web view打开URL。

例如:URL重定向到:

https://api.twitter.com/oauth/authenticate?oauth_token=NPcudxy0yU5T3tBzho7iCotZ3cnetKwcTIRlX0iwRl0

根据用户的状态,在终点的标志将表现为以下三种方式之一:

  1. Item 1登录和核对成功:如果用户已登录twitter.com而且已经成功调用应用程序。他们会被立刻验证然后返回一个带有正确的认证请求令牌的回调URL。此时不显示重定向到twitter.com的用户。
  2. Item 2登录但未核对成功:如果用户已登录twitter.com但未成功调用应用程序。请求认证的应用程序将会显示。接受授权请求后,用户会被重定向到带着有效的OAuth请求令牌的回调URL中。
  3. Item 3未登录成功:如果用户未成功登录 twitter.com,他们会被提示进入到证书页面中然后授予应用程序访问权限在同一屏幕中来访问他们的信息。登录成功后,返回一个带有正确的认证请求令牌的回调URL。

数据交互中可能的状态的符号的流程图如下所示:

身份验证成功后,您的callback_url会收到一个请求,其中包含oauth_token和oauth_verifier参数的。你的应用程序会验证令牌是否与第一步中收到的令牌相匹配。

来自客户端的请求重定向(封装查询字符串参数):

GET /sign-in-with-twitter/?
        oauth_token=NPcudxy0yU5T3tBzho7iCotZ3cnetKwcTIRlX0iwRl0&
        oauth_verifier=uw7NjWHT6OJ1MpJOXsHfNxoAhPKpgI8BlYDhxEjIBY HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/535.5 (KHTML, like Gecko) Chrome/16.0.891.1 Safari/535.5
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Referer: http://localhost/sign-in-with-twitter/
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Edit

第三步.从请求令牌转换到访问令牌

要想让请求令牌转换成一个可用的访问令牌,你的应用程序必须在
POST oauth/request_token
端获得一个包括第二步中得到的oauth_verifier值的返回值。请求令牌也要在oauth_token的标头部分验证通过,但是这将在已经添加了签名过程之后发生。

请求示例(授权的开头已被封装):

POST /oauth/access_token HTTP/1.1
User-Agent: themattharris' HTTP Client
Host: api.twitter.com
Accept: */*
Authorization: OAuth oauth_consumer_key="cChZNFj6T5R0TigYB9yd1w",
                     oauth_nonce="a9900fe68e2573b27a37f10fbad6a755",
                     oauth_signature="39cipBtIOHEEnybAR4sATQTpl2I%3D",
                     oauth_signature_method="HMAC-SHA1",
                     oauth_timestamp="1318467427",
                     oauth_token="NPcudxy0yU5T3tBzho7iCotZ3cnetKwcTIRlX0iwRl0",
                     oauth_version="1.0" 
Content-Length: 57
Content-Type: application/x-www-form-urlencoded

oauth_verifier=uw7NjWHT6OJ1MpJOXsHfNxoAhPKpgI8BlYDhxEjIBY

一个成功的返回值包括:oauth_token, oauth_token_secret, user_id 和 screen_name参数。令牌和令牌密码将会被保存以便用于未来的身份验证及请求Twitter的API。

响应示例(请求部分已被封装):

HTTP/1.1 200 OK
Date: Thu, 13 Oct 2011 00:57:08 GMT
Status: 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 157
Pragma: no-cache
Expires: Tue, 31 Mar 1981 05:00:00 GMT
Cache-Control: no-cache, no-store, must-revalidate, pre-check=0, post-check=0
Vary: Accept-Encoding
Server: tfe

oauth_token=7588892-kagSNqWge8gB1WwE3plnFsJHAZVfxWD7Vb57p0b4&
oauth_token_secret=PbKfYqSryyeKDWz4ebtY3o5ogNLG11WJuZBc9fQrQo
Edit

Twitter 4J

http://twitter4j.org/en/index.html#introduction

Edit

概述

Twitter4J是非官方的Twitter API 的Java库。有了它,你可以很容易地整合Java应用程序与Twitter服务。

Edit

特点:

  • 100%纯正Java –适用任何1.4.2或更高版本的Java平台。
  • 适用于安卓谷歌 的应用平台。
  • 零依赖:不需要额外的jar包。
  • 内置oauth支持。
  • 直接解压即可使用。
Edit

系统需求:

  • OS: Windows或Unix的支持Java的任何版本。
  • JVM: Java 1.4.2或更高版本。
Edit

使用方法:

添加twitter4j-core-2.2.6.jar 到你的工程中的classpath目录下。

如果你熟悉Java语言,开始使用的最简单的办法是查询JavaDoc

Edit

源代码:

文档中已包含的文件和源代码。
您也可以通过以下链接浏览项目库:
http://github.com/yusuke/twitter4j/
你也可以查看最近更新的源代码:
http://github.com/yusuke/twitter4j.git/

Edit

取得自己ID的方法-getID

返回用户认证的用户ID。
如果这个实例通过提供的Basic和Email address来代替用户名且验证成功,或者通过令牌验证成功,这个方法会调用内部名为verifyCredentials()的参数。来返回认证用户的ID。

示例:

  if (friendsListener != null) {
            try {
                long userId = twitter.getId();
                friendsListener.onGotMyself(String.valueOf(userId));
                getFriends(friendsListener, parameter);

            } catch (IllegalStateException e) {
                e.printStackTrace();
            } catch (TwitterException e) {
                e.printStackTrace();
            }
        }
Edit

取得好友ID的方法-getFriendsIDs

返回一组认证用户的数字型的ID。

Edit

参数

  • UserId:返回指定用户的好友列表。
  • 光标:每次最多5000个ID从连接列表被分解在页面显示。在链接查询暂停的用户被过滤出之后返回的ID数不能保证是5000。
    首先页面提供了一个值为-1的光标。从API的返回值会包括previous_cursor和next_cursor两部分来允许页面返回和前进。
    返回值为一组认证用户好友的数字型的ID。

示例:

public final class GetFriendsIDs {
    /**
     * Usage: java twitter4j.examples.friendsandfollowers.GetFriendsIDs [screen name]
     *
     * @param args message
     */
    public static void main(String[] args) {
        try {
            Twitter twitter = new TwitterFactory().getInstance();
            long cursor = -1;
            IDs ids;
            System.out.println("Listing following ids.");
            do {
                if (0 < args.length) {
                    ids = twitter.getFriendsIDs(args[0], cursor);
                } else {
                    ids = twitter.getFriendsIDs(cursor);
                }
                for (long id : ids.getIDs()) {
                    System.out.println(id);
                }
            } while ((cursor = ids.getNextCursor()) != 0);
            System.exit(0);
        } catch (TwitterException te) {
            te.printStackTrace();
            System.out.println("Failed to get friends' ids: " + te.getMessage());
            System.exit(-1);
        }
    }

抱歉!评论已关闭.