OAuth 1.0a 授权

萌否API OAuth 授权介绍

OAuth 是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源,而无需将用户名和密码提供给第三方应用。

萌否 API 使用 OAuth 标准为第三方应用提供接入服务,目前使用的是 OAuth 1.0a 版本。

OAuth 官网网站:http://www.oauth.net/

如何使用?

目前 OAuth 的授权过程已被多种编程语言实现,如 PHP、Java、Objective-C、Ruby、JavaScript等,第三方应用开发者可直接调用现成的开发包来完成 OAuth 授权,极大地节约了开发时间。具体的现成 OAuth 开发包可在网络中搜索得到。

另一方面,实现 OAuth 授权程序有着一定的技术门槛,无论是从安全性角度考虑,还是从开发成本方面考虑,我们都建议开发者们直接使用现成的、成熟的 OAuth 开发包来完成 OAuth 授权,不建议自行实现 OAuth 认证程序。

若开发者对 OAuth 的底层过程感兴趣,或想自行实现 OAuth,请参考其他文献资料。下文将直接介绍萌否 OAuth 授权的流程。

OAuth 授权流程

OAuth 授权可主要分为一下三大步骤:

  • (1)获取 Request Token
  • (2)获取用户授权
  • (3)获取 Access Token

我们的目标是获得最后一步(3)中的 Access Token,以后可用它来访问萌否的 API 资源。

这三大步骤分别对应下图左侧的三个灰色圆圈序号:

下面将逐步介绍授权流程。假设开发者已有 OAuth 开发包,直接传递所需参数即可完成通信操作(即略去了底层如何计算认证签名等过程,故下文不提 oauth_nonce、oauth_signature 等参数,这些交由 OAuth 开发包自动完成)。

(1)获取 Request Token

URL:http://api.moefou.org/oauth/request_token

还记得 Consumer Key 及 Consumer Secret 吗?它们在你开放平台创建应用的时候就已经生成好了,如果你忘记了,在“我的应用 → 应用信息”里就能找到它们。

在这一步,我们将使用 Consumer Key 及 Consumer Secret 向服务器(即萌否开放平台)请求一个未授权的 Request Token 及 Token Secret。

将 Consumer Key 和 Consumer Secret 输入 OAuth 开发包中,并向以上 URL 发出请求。如果请求成功,那么服务器将返回以下字符串:

oauth_callback_confirmed=1&oauth_token=98356305a30a8e585497aa990684810804f5d8477&oauth_token_secret=554223a8c6268f701eaed909dab42686&xoauth_token_ttl=3600

其中,oauth_token 和 oauth_token_secret 就是我们要的未授权的 Request Token 和 Token Secret。在程序中把它们记下来,比如:

request_token = "98356305a30a8e585497aa990684810804f5d8477";
token_secret = "554223a8c6268f701eaed909dab42686";

当然,以上返回值只是我们为方便讲解而构造的,不必当真。它们将在之后的步骤中用到。

(2)获取用户授权

URL:http://api.moefou.org/oauth/authorize

现在,我们将提交未授权的 Request Token 及 Token Secret 到开放平台的授权页面,用户将在这个页面进行登录并选择是否授权。如果用户同意授权,那么服务器将对 Request Token 及 Token Secret 进行授权,我们之前在程序中记录的 Request Token 及 Token Secret 就变成已授权的了,但数值仍保持不变。

将 Consumer Key、Consumer Secret、Request Token、Token Secret 输入 OAuth 开发包中,并提交到以上 URL。这时,用户将看到以下界面。如果用户尚未登录,则会出现登录框。

用户授权后,服务器将对 Request Token 及 Token Secret 进行授权,并返回 Verifier 码。

如果你在应用信息里填有“回调网址”,那么页面将携带 Verifier 参数跳到回调网址中,例如:

http://your-app-url.com/callback?verifier=ad34d1ff89

如果没填回调网址(比如客户端应用,没有网址这种说法),那么会跳到另一个页面来显示 Verifier,让用户手动向第三方应用输入 Verifier:

总之,你的程序应该能够记录下这个 Verifier。同时,之前的 Request Token 和 Token Secret 也不要丢,你不需要修改它们的值,它们在第三步仍将用到。就像这样:

verifier = "ad34d1ff89";
request_token = "98356305a30a8e585497aa990684810804f5d8477";
token_secret = "554223a8c6268f701eaed909dab42686";

再次强调,上面的取值是我们构造出来的,在实际情况中,它们会有不同的取值。

(3)获取 Access Token

URL:http://api.moefou.org/oauth/access_token

在这一步,我们将使用已授权的 Request Token、Token Secret 及 Verifier 向服务器申请 Access Token。

将 Consumer Key、Consumer Secret、Request Token、Token Secret 及 Verifier 输入 OAuth 开发包中,并向以上 URL 发出请求。如果请求成功,那么服务器将返回以下字符串:

oauth_token=2b8eb0a831cd95a25d650cfab00547ec04f5d8525&oauth_token_secret=9cb4f43bac287714bd824dda34616bce

其中的 oauth_token 和 oauth_token_secret 便是我们要的 Access Token 和 Access Token Secret。例如:

access_token = "2b8eb0a831cd95a25d650cfab00547ec04f5d8525";
access_token_secret = "9cb4f43bac287714bd824dda34616bce";

至此,OAuth 授权完毕。请务必妥善存储好这两个值,在以后使用 OAuth 访问萌否 API 资源时,都将使用到 Access Token。

在 OAuth 1.0a 中,Access Token 和 Access Token Secret 是长期有效的,除非用户主动取消授权或重新授权。因此,开发者需要将 Token 存放在安全可靠且不宜泄漏的地方(如数据库,而不是 Session),以后访问萌否 API 资源时,直接使用这两个 Token 即可,而无须重复以上三大步骤。

oauth.txt · 最后更改: 2015-01-09 22:32 (外部编辑)