我正试图围绕 OAuth2 和 Perl(即 Net::OAuth2)——特别是为数据库和使用它的应用程序设置一个 RESTful API。
Perl Oauth2 包把我带到了 Net::OAuth2。
据我所知,我需要做几件事(如果我在某处杂草丛生,请纠正我):
- 服务器端:构建 REST 服务器(目前正在为此使用 mojolicious),它与数据库通信。
- 服务器端:构建认证/授权服务器(??)
- 客户端应用程序:使用 WWW::Mechanize(或类似的)与 REST 服务器对话
在我看来,它是这样工作的:
- 客户端应用程序有一个 API 密钥(向服务器注册(REST 服务器?身份验证服务器?),并“嵌入”到客户端)
- 用户在服务器上数据库的表中有一个条目(用户名和密码)
- 用户启动客户端应用程序,并尝试访问受保护的资源(比如更新一行)(再次,例如,通过在客户端中选择“做这件事”菜单选项;客户端将其转换为 REST API URI,例如http://the.rest.server/api/thisthing)
- 服务器将客户端重定向到(服务器的)身份验证/授权位
- 服务器、客户端和用户执行神奇的 OAuth 舞蹈来验证用户
- 服务器、客户端和用户执行另一个神奇的 OAuth 舞蹈,以确保用户有权查看该资源 URI
- 如果一切正常,服务器会将客户端重新重定向到最初请求的资源 URI(需要任何身份验证参数)。
这是对过程的合理评估吗?
如果是这样,将“身份验证/授权”作为 REST 服务器的一部分,还是作为完全独立的服务器更有意义?(在相同的硬件上)。
Net::OAuth2::Profile::WebServer很好地解释了客户端应用程序端必须发生的事情。
http://cpansearch.perl.org/src/MARKOV/Net-OAuth2-0.55/t/中的测试(除非我真的错过了什么)是关于使用 Net::OAuth2 网络服务器配置文件,这将(再次)成为“客户端应用程序”。
还有其他编写客户端的示例——连接到现有的 OAuth2 服务器,例如 Google API 的东西——但我找不到编写服务器的例子......(如果可以的话,我非常愿意使用 RTFM 找到调频...指针赞赏!)