8

我正试图围绕 OAuth2 和 Perl(即 Net::OAuth2)——特别是为数据库和使用它的应用程序设置一个 RESTful API。

Perl Oauth2 包把我带到了 Net::OAuth2。

据我所知,我需要做几件事(如果我在某处杂草丛生,请纠正我):

  1. 服务器端:构建 REST 服务器(目前正在为此使用 mojolicious),它与数据库通信。
  2. 服务器端:构建认证/授权服务器(??)
  3. 客户端应用程序:使用 WWW::Mechanize(或类似的)与 REST 服务器对话

在我看来,它是这样工作的:

  1. 客户端应用程序有一个 API 密钥(向服务器注册(REST 服务器?身份验证服务器?),并“嵌入”到客户端)
  2. 用户在服务器上数据库的表中有一个条目(用户名和密码)
  3. 用户启动客户端应用程序,并尝试访问受保护的资源(比如更新一行)(再次,例如,通过在客户端中选择“做这件事”菜单选项;客户端将其转换为 REST API URI,例如http://the.rest.server/api/thisthing
  4. 服务器将客户端重定向到(服务器的)身份验证/授权位
  5. 服务器、客户端和用户执行神奇的 OAuth 舞蹈来验证用户
  6. 服务器、客户端和用户执行另一个神奇的 OAuth 舞蹈,以确保用户有权查看该资源 URI
  7. 如果一切正常,服务器会将客户端重新重定向到最初请求的资源 URI(需要任何身份验证参数)。

这是对过程的合理评估吗?

如果是这样,将“身份验证/授权”作为 REST 服务器的一部分,还是作为完全独立的服务器更有意义?(在相同的硬件上)。

Net::OAuth2::Profile::WebServer很好地解释了客户端应用程序端必须发生的事情。

http://cpansearch.perl.org/src/MARKOV/Net-OAuth2-0.55/t/中的测试(除非我真的错过了什么)是关于使用 Net::OAuth2 网络服务器配置文件,这将(再次)成为“客户端应用程序”。

还有其他编写客户端的示例——连接到现有的 OAuth2 服务器,例如 Google API 的东西——但我找不到编写服务器的例子......(如果可以的话,我非常愿意使用 RTFM 找到调频...指针赞赏!)

4

1 回答 1

4

总体思路是让中央身份验证服务器处理凭证 + 令牌生成 + 策略处理(策略 => 是用户授权的应用程序)。

我们先来谈谈OAuth 服务器
i) 服务器负责登录页面,用户可以在其中键入他的凭据。
ii) 验证凭据,如果正确,则此服务器然后检查哪个客户端应用程序进行了调用并验证“此应用程序是否由用户授权”。- 这里涉及范围的概念。
iii) 为应用程序生成访问令牌/授权码。
iv) 当客户端使用访问令牌访问 API 时,API 应在内部将令牌传递给该服务器。验证令牌内容是该服务器的工作。

现在,API
i) API 应该接受来自客户端应用程序的令牌,将其传递给服务器 - 从服务器获取唯一的客户 ID 并将数据返回给该客户的客户端。

对于3rd 方应用程序
i) 您需要有一个注册过程。客户端需要有client-id 和secret。Google 允许您在控制台中注册。
ii) 应该有一个映射到每个唯一 API 的范围。例如,当您制作 Google OAuth 应用程序时,您需要为您的应用程序注册一个范围 - 范围是 G+、picasa、google drive 等
。iii) 访问令牌对于范围是唯一的,并映射到用户授予您的应用程序的权限. 如果用户客户端应用仅选择 G+ 范围,并被用户授予访问权限 - 该应用只能将令牌用于 G+ 端点。

可以在此处找到有关如何实现 OAuth 服务器的更详细答案:高效的 OAuth2.0 服务器/提供者如何工作?

于 2013-05-11T04:20:53.583 回答