`
isiqi
  • 浏览: 16491691 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

OAuth 认证步骤

阅读更多

Twitter 将于本月16日开始限制 Basic authentication 的使用,而直至本月31日,所有 Basic authentication 的请求都将只能收到 403 的回复了。尽管这会给亚洲某个地区的用户带来很大的不便,但是我们也要看到 OAuth 的好处,比如更强的安全性,因为不会泄漏用户的密码等信息,脱离密码的另一个好处就是各种应用可以无视用户对密码的修改,用户修改密码后并不会影响应用的 正常工作,此外,我们可以给自己的消息设置一个自定义来源名称,利于个性化...

这两天我尽力地先改进自己的微博客同步工具,以便支持 OAuth 认证,失败了无数次,积累了一些经验,分享一下。

Authenticating Requests with OAuth 这篇官方的指导是必须要看的,事实上如果仔细地阅读了这篇文章,那么也不会出现什么问题了。不过我再画蛇添足地说一下具体的过程吧-.-

一、创建应用

当我们在 Twitter applications 页面创建了一个应用之后(假设为客户端的,以下也以此为例了),我们可以获得如下的信息:Consumer key ,Consumer secret ,Request token URL ,Access token URL ,Authorize URL 这些东西拿来干什么的,怎么用呢?我们继续...

二、获取未授权的 Request Token

当然不是一笔带过地说一句“把Consumer key 和 Consumer secret 放入 HTTP 请求中发送到 Twitter API ”就完了,我不知道有多少人看到这样一句话的时候是跟我一样的完全摸不着头脑,放入请求是要怎么个放法...?

在获取 Request Token 的时候,我们需要

  • oauth_consumer_key, 就是我们在创建应用时的 Consumer key
  • oauth_signature_method,Twitter 支持 HMAC-SHA1
  • oauth_timestamp,就是当前时间距 1970 00:00:00 GMT 的秒数,注意必须为整数值
  • oauth_nonce,每次自己随机生成的字符串,能保证每次的都不同就好了
  • oauth_version,现在为 1.0
  • oauth_callback,使用客户端的时候可以空着 oauth_callback,twitter能懂的~
  • oauth_signature,这个是最复杂的,下一段解释-.-

在获取 oauth_signature 之前我们要先得到一个叫做 base string 的东西,它由 HTTP 方法名(一般可以选择 GET 或者 POST,我说..我们这里用 GET)、URL 编码的请求路径(urlencode之后的 Request token URL)和请求的参数表(除了 oauth_signature 之外的所有参数按照名称经过重新排序之后使用&号连接,最后 urlencode)组成。这样我们就可以得到一个类似这样的 base string 了
GET&https%3A%2F%2Fapi.twitter.com%2Foauth%2Frequest_token&oauth_consumer_key%3DGDdmIQH6jhtmLUypg82g%26oauth_nonce%3DQP70eNmVz8jvdPevU3oJD2AfF7R7odC2XJcn4XlZJqk%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1272323042%26oauth_version%3D1.0

得到 base string 之后我们还需要一个 签名 key ,它就是由我们在创建程序时获得的 Consumer secret 和 oauth_token_secret 用 & 连接而成,不过我们在请求 Request Token 的时候还没有 oauth_token_secret 呀,那就 oauth_token_secret 为空,不过中间的 & 不能省。

在获得 base string 和 signing key 之后就可以利用这两者来生成oauth_signature了,比如python的实现

base64.b64encode(hmac.new(consumer_secret+'&', base_string, hashlib.sha1).digest())

注意 :在使用 GET 方式传送时,oauth_signature 不需要再进行 urlencode 了,但是在使用 POST 方式,将所有参数放在 header 里的时候,oauth_signature 还需要再进行一次 urlencode 。

好了,现在我们获取未授权 Request Token 时需要的参数都齐备了,连接到创建程序时获得的 Request token URL 之后(中间加?),得到类似这样一个地址

https://api.twitter.com/oauth/request_token?oauth_nonce=5151577474&oauth_timestamp=1281769547&oauth_consumer_key=your_consumer_key&oauth_signature_method=HMAC-SHA1&oauth_version=1.0&oauth_signature=vdmXR5%2BZg5WHgFrC25vTZm4TfRg%3D

那么现在就用 GET 方式请求这个地址吧,返回的结果类似

oauth_token=xxxxx&oauth_token_secret=xxxxx&oauth_callback_confirmed=true

很轻松地就可以提取出来 request_token 和 request_token_secret 吧,不过此时的 Request Token 还是未授权的

三、用户授权此 Request Token

需要用户用浏览器打开这样一个地址:https://api.twitter.com/oauth /authorize?oauth_token=xxxxx ,当然其实最好是程序自动地帮用户打开了..-.-,很显然,前面一段呢就是用户在创建程序时获得的 Authorize URL ,中间加上 ?后面则是跟的上一步中获取到的 request_token ,好了,现在如果用户已经登陆了 twitter 的话,就可以看到这样一个界面了

OAuth authentication steps

点击 Allow 后完成授权,此时会出现一串 PIN 码,用户应该记下来,以便接下来再获取 Access token

四、获取 Access token

总结一下,我们通过以上几步新获得了几个参数,授权过的 request_token 和 request_token_secret,还有一个 PIN 码。

获取 Access token 的过程和获取未授权的 Request token 过程是类似的,所以我这里只介绍一下其中仅有的几点区别,获取 Access token 时和 Request token不同的是需要 8 个参数,去掉 oauth_callback 这个,但是另外加上 oauth_verifier (值就是上面的 PIN 码)和 oauth_token (值就是刚获得的 request_token),另外 signing key 里的 oauth_token_secret 不再为空了,它就是刚才获得的 request_token_secret ,最后一点就是请求的地址前面部分为创建程序时获得的 Access token URL ,其他的规则都是一样的,当然最后获得的放回结果里就是 access_token 和 access_token_secret 了,对于 access_token 和 access_token_secret 我们可以保存下来,以后访问受保护的资源则直接利用它,而不需要每一次都经历一下上面的曲折阶段。

五、拿到 Access token 来发一条消息

和获取 Access token 相比,进行资源访问等操作时所需的参数不包含 oauth_verifier,而外添加一个 status 的参数(准确点应该是 POST 内容的主体部分),其值为发送的消息(UTF-8编码不解释) 其他参数则都是一样的( oauth_token 为 access_token),oauth_signature 的生成当然也还是一样需要 signing key (由 consumer_key 和 access_token_secret组成)和 base string (请求地址为 API 地址),不过这一次必须要使用 POST 方式提交数据,所以在生成 base string 时的方法为 POST,最终生成的 oauth_signature 也需要 urlencode。

这一次,所有的参数不再需要跟某个地址进行连接操作了,我们构造一个 HTTP Authorization header ,结果如下

OAuth status="%E4%B8%80%E5%A0%86%E5%BE%AE%E5%8D%9A%E5%AE%A2",oauth_nonce="4992019565",oauth_timestamp="1281772029",oauth_consumer_key="your_consumer_key",oauth_signature_method="HMAC-SHA1",oauth_version="1.0",oauth_token="your_access_token",oauth_signature="dFmXo%2BxOWFMOhkZWTl80fh3IelM%3D"

可见就是"OAuth "之后将所有的参数列了出来,这样在使用 POST 方式请求 API 的时候带上这样一个 Authorization header ,同时 POST 的内容为 status=message (不要忘记 urlencode),便能成功地发布一条消息了。

分享到:
评论

相关推荐

    安卓开发-新浪、腾讯、网易、搜狐微博OAuth认证整合Android版.zip.zip

    网易微博的OAuth认证步骤也大同小异。在网易微博开放平台注册应用,获取AppKey和AppSecret。然后根据其提供的API文档,构建合适的授权URL,引导用户进行授权,最后获取Access Token。 4. 搜狐微博OAuth认证: ...

    c#中oauth认证

    以下是C#中实现OAuth认证的关键步骤和知识点: 1. **注册客户端**:首先,你需要在授权服务器上注册你的应用,获取客户端ID(Client ID)和客户端秘密(Client Secret)。这些是之后认证过程中必不可少的凭据。 2....

    Oauth认证流程学习代码

    为了更好地学习和理解OAuth认证流程,你可以按照以下步骤进行: 1. 阅读并理解每个步骤涉及的HTTP请求和响应。 2. 分析代码中如何处理授权码和访问令牌。 3. 学习如何验证和使用刷新令牌以更新过期的访问令牌。 4. ...

    新浪微博 api Oauth认证.

    在微博API中,OAuth认证是第三方应用获取用户授权,安全地访问其微博账户信息的关键步骤。 【描述】:2011年的这篇博客文章,作者分享了如何在2011年的背景下实现对新浪微博API的OAuth认证过程。通过这个过程,...

    OAuth 认证流程

    在"my_oauth"这个文件夹中,可能包含了关于如何实现OAuth认证的代码示例、配置文件或者教程文档,帮助开发者理解和实践OAuth认证流程。对于开发人员来说,理解并正确实施OAuth认证流程至关重要,以便在实际项目中...

    OAuth认证以及使用网易微博开放平台实现聊天功能

    OAuth认证是一种广泛应用于移动应用和Web服务中的授权框架,它允许第三方应用在用户授权的情况下,安全地访问用户的个人信息或者特定服务。在这个场景中,我们提到的是如何利用OAuth认证结合网易微博开放平台来实现...

    OAuth认证的实现

    OAuth认证是一种广泛应用于互联网服务中的授权框架,它允许第三方应用在用户无需透露其登录凭证的情况下,访问特定的受保护资源。OAuth认证的核心理念是让用户控制第三方应用如何访问他们的数据,而无需分享自己的...

    豆瓣OAuth认证示例项目

    - `auth.py`:负责处理OAuth认证流程,包括获取请求令牌、获取访问令牌等步骤。 - `config.py`:存储豆瓣API的客户端ID、客户端密钥以及回调URL等配置信息。 - `requests.py`:封装了HTTP请求,用于与豆瓣API进行...

    关于微博服务端API的OAuth认证实现.pdf

    主要内容包括OAuth认证的基本原理、微博服务端API的工作机制以及如何实现OAuth认证的具体步骤。此外,文章还将介绍在实现过程中可能遇到的一些常见问题及其解决方法。 #### OAuth认证原理 OAuth是一种开放标准,...

    新浪微博上传图片、OAuth认证

    OAuth认证通常包括四个步骤:请求授权、重定向用户、获取访问令牌和使用令牌访问资源。 1. 请求授权:开发者首先需要在新浪微博开放平台注册应用,获取到App Key和App Secret。然后,通过App Key引导用户跳转到新浪...

    OAuth认证整合Android版-demo示例初学者

    通过分析和运行这个示例,初学者可以更直观地理解OAuth认证的步骤和Android中实现的细节。 学习OAuth认证对于Android开发者来说至关重要,因为它能够让你的应用无缝接入各种在线服务,提升用户体验。同时,了解并...

    深入理解Go语言中的OAuth认证:实现安全授权的指南

    在Go语言中实现OAuth认证是一个涉及多个步骤的过程,但通过使用oauth2库,你可以简化这个过程。理解OAuth的工作原理和实现细节,可以帮助你构建更安全、更可靠的应用程序。 通过本文的介绍和示例,你应该能够理解...

    SANGFOR_ACSG_v12.0.25_Oauth认证配置原理指导.pdf

    深信服公司的SANGFOR_ACSG_v12.0.25版本提供了Oauth认证的配置与实施指南,旨在帮助用户理解Oauth认证的原理,并提供详细的配置步骤。Oauth是一种开放标准授权协议,它允许第三方应用在用户的许可下访问其存储在另一...

    android sina oauth 认证

    在Android平台上进行微博(Sina)OAuth认证是一种常见的第三方登录或数据获取方式。OAuth,全称是开放授权协议,它允许用户让第三方应用在不获取用户名密码的情况下,安全地访问存储在另一服务提供者上的个人信息。...

    OAuth 腾讯微博的OAuth认证

    OAuth认证的核心流程包括以下几个步骤: 1. **请求临时令牌(Request Token)**:开发者首先向腾讯微博的OAuth服务器申请一个临时令牌,这个令牌用于后续的授权过程,同时会返回一个回调URL,用户在授权后会被...

    oauth认证中心.doc

    **OAuth 认证中心** OAuth(开放授权)是一种开放标准,允许用户让第三方应用无需知道其用户名和密码就能获取授权,以访问存储在其他服务提供商上的个人信息。OAuth2.0 是 OAuth 协议的最新版本,它提高了安全性并...

    新浪、腾讯、网易、搜狐微博OAuth认证整合Android版

    在Android中实现这四大微博平台的OAuth认证,通常需要以下步骤: - 引入对应微博SDK - 注册并获取API密钥 - 设置回调URL(部分平台需要) - 用户点击登录按钮时启动授权流程 - 使用浏览器或内置WebView打开授权页面 ...

    oauth认证服务器端和客户端

    OAuth认证涉及两个主要角色:服务器端(也称为资源服务器)和客户端。 **OAuth认证服务器端**: OAuth服务器端是拥有用户资源的服务提供者,如社交网络或邮件服务。当用户想要授权第三方应用访问其在服务器端的资源...

Global site tag (gtag.js) - Google Analytics