跳至正文

什么是 OAuth Connect 以及如何使用它

什么是 OAuth Connect 以及如何使用它

我们中的许多人在浏览 Web 时都会接触到 OAuth,但我们中的大多数人甚至都不知道它的存在。OAuth(开放式身份验证)是一种允许第三方网站有限访问用户帐户(例如,您的 Twitter 或 Facebook 帐户)的系统。

它允许访问者在站点内进行交互,而无需注册新帐户或将您的用户名和密码透露给第三方。

在本指南中,我想介绍 OAuth 的概念以及它如何应用于开发人员。实现您自己的 OAuth 应用程序涉及很多技术细节。我的示例将使用 Twitter 库包装器以 PHP 编写,但您可以使用几乎任何流行的编程 API,从 Python 到 Ruby 或 Objective-C。

即使这个概念感觉很神秘,也要尽可能多地消化。它仍然是一项非常神秘的技术,在 2007 年刚刚起草我当然不明白如何开发完整的 OAuth 连接,即使在我的前几个教程之后,但如果你坚持下去,你会很快掌握的。现在先拉开序幕,一个小介绍!

我们能解决什么问题?

如果你考虑一下互联网的连接性有多强,就会发现用户希望在多个帐户之间共享信息,从 Facebook 到 Twitter、Tumblr、Foursquare,现在甚至到PathInstagram等移动应用程序。

我们现在面临的问题是如何以最安全、最简单的方式实现这一点。与旧的 OpenID 标准相比,OAuth 1.0 试图解决这个问题和许多其他问题。用户仍在将他们的用户名/密码输入其他第三方网站只是为了连接到 OpenID。

这不会使用户更安全。根据 OAuth 规范,用户永远不需要将任何个人帐户数据存储到第三方数据库中。

使用 OAuth,主要帐户提供者(例如 Twitter、Facebook)将首先将您(用户)重定向到授权页面。然后用户登录到主网络,然后接受或拒绝到第三方网站的新连接。

该技术非常简单,您可以随时从您的帐户设置中取消对连接的授权。请注意,您的密码永远不会提供给第三方,这使得该协议比其对应协议更安全。

这个过程是如何运作的

在标准 OAuth 调用中需要考虑 3 个方面:

  • 服务提供商——您尝试从中提取数据的主要网络。他们提供 API 响应,例如您的用户名、个人资料图片、网站 URL 和其他内容。
  • 消费者——希望接收数据的第 3 方应用程序。这将是发出初始连接请求的网站或移动应用程序,然后还处理授权后的返回数据。
  • 用户——坐在电脑后面与网站交互的人就是你!

OAuth 的目的不是为网站提供特定的库以供使用。它实际上设置了构建开放协议 API 的“规则”。因此,虽然我们都可以从这项技术中获益,但真正对这一领域感兴趣的实际上是开发人员。如果您需要更多信息,请查看 2010 年 4 月发布的修订版 v1.0

面对安全

整个过程最终需要 2 个不同的密钥和一个访问令牌。密钥在您注册应用程序后由根服务提供——这些被称为您的客户端秘密 ID客户端 ID 通常会传递到身份验证 URL 中,以便服务器可以识别您的应用程序。

秘密 ID 保存在您的代码中,以便服务器可以验证您的应用程序的身份。同样,远程服务器会将您的秘密 ID 与其自己的进行匹配,这样您就不会错误地将 Twitter 请求发送到 Facebook 的 API,反之亦然。

如果用户授权连接并且所有密钥都匹配,那么它们将返回到您的网站,其中包含一长串随机数字和字母。

此代码用于生成新的访问令牌这些行为类似于会话变量,您可以将其存储在 cookie 中以保持用户登录到您的网站。唯一的区别是许多服务将发回访问令牌和秘密访问令牌。

您可能需要这两个来从服务器中提取任何数据。例如,请求用户的个人资料照片在您自己的网站上保存一份副本。

Twitter OAuth 示例库

开发人员通常不太可能从头开始,那么为什么不查看以前构建的库呢?在使用 PHP 时,这将节省我们的时间,并避免头痛。让我们看看在 Twitter API 之上构建一个非常简单的示例。

Twitter 帐户设置 - 授权应用程序

我强烈推荐GitHub 上 Jaisen Mathai 的Twitter Async它运行完美,甚至提供了一些我们可以查看的非常简单的示例代码。您现在可以下载 .zip,但在查看代码之前,我们需要注册并从 Twitter 获取我们的应用程序 ID。

注册新应用

对于刚开始使用 API 的人来说, Twitter 开发中心是一个很好的资源。在几年的时间里,它已经被编写和重写了很多次。我们想要的页面是https://dev.twitter.com/apps/new它首先会要求您登录,然后您需要为新应用程序输入一些凭据。

Twitter 开发中心 - 注册新应用

用户去推特授权时会显示App名称和描述。您的网址对于区分第三方地址也很重要。尽管您可以使用 localhost 进行测试,但使用实时域会更容易,但我不鼓励这种方法。注册一个免费的网络主机并从那里运行您的脚本同样容易。

在访问者接受或拒绝授权后,回调 URL 被声明为最终目的地。作为程序员,您的工作是从 Twitter 读取响应并相应地输出消息。

在 Async 库中,我们已经准备好一些凭据,但它们将不起作用,因为回调 URL 已指定给外部博客。如果您有兴趣构建完全连接的 OAuth Web 应用程序,我在下面提供了一些详细教程。

检查代码

如果您使用的是远程 Web 主机,您可能需要解压缩异步库并将它们上传到新目录。否则你可以直接查看源代码。无论如何,我们很可能无法建立新的连接。但是上传和编辑源代码的实践经验始终是一个学习过程。

在根目录中,您会找到一个名为simpleTest.php的脚本。里面有很多与 OAuth 库相关的 PHP 代码。我无法为您将所有内容放在一起,但我们应该查看一个重要的代码块来查明值得注意的细节。

1个
2个
3个
4个
5个
6个
7
8个
9
10
11
<?php
include 'EpiCurl.php';
include 'EpiOAuth.php';
include 'EpiTwitter.php';
$consumer_key = 'jdv3dsDhsYuJRlZFSuI2fg';
$consumer_secret = 'NNXamBsBFG8PnEmacYs0uCtbtsz346OJSod7Dl94';
$token = '25451974-uakRmTZxrSFQbkDjZnTAsxDO5o9kacz2LT6kqEHA';
$secret= 'CuQPQ1WqIdSJDTIkDUlXjHpbcRao9lcKhQHflqGE8';
$twitterObj = new EpiTwitter($consumer_key, $consumer_secret, $token, $secret);
$twitterObjUnAuth = new EpiTwitter($consumer_key, $consumer_secret);
?>

对于消费者密钥和秘密 ID,以及令牌和秘密令牌 ID,有 4 个非常重要的变量。并非所有 API 服务都需要这 4 个,但它是正确的 OAuth 协议。EpiTwitter 类需要所有 4 个值作为参数,并生成到 Twitter 的连接 URL。

1个
https://api.twitter.com/oauth/authorize?oauth_token=TOKEN_ID_HERE

使用这个新的动态 URL,您可以为您的用户创建一个登录按钮。这将首先引导他们到一个安全的 Twitter API 页面,用户可以在该页面上接受或拒绝您的连接。无论他们的选择如何,用户都会被重定向到您的应用回调 URL。

整个开放协议有一个非常清晰的视角,允许快速开发,尤其是在几乎所有语言都可用的库中。

相关链接

结论

希望对 OAuth 的介绍让您对通过该协议构建应用程序感兴趣。许多开发人员一直在努力寻求这样的解决方案,而 OAuth 2.0 可能是互联社交网络的未来。我已经在我的 Twitter 帐户中使用了超过两打的连接,开发人员的文档给我留下了深刻的印象!

显然,关于这个话题有很多话要说。这不是您一次可以完全处理的事情。在网上浏览更多 OAuth 解决方案,并在下面的讨论区告诉我们您的想法。

标签:

发表回复