我试图围绕OAuth2和Perl(即Net :: OAuth2) - 特别是为数据库设置RESTful API,以及使用它的应用程序.
Perl Oauth2包把我带到Net :: OAuth2.
尽可能接近,我需要做几件事(如果我在某处的杂草中,请纠正我):
在我的脑海中,这是它的工作原理:
这是对这个过程的合理评估吗?
如果是这样,将"身份验证/授权"作为REST服务器的一部分或作为完全独立的服务器更有意义吗?(在相同的硬件上).
Net :: OAuth2 :: Profile :: WebServer很好地解释了客户端应用程序端必须发生的事情.
http://cpansearch.perl.org/src/MARKOV/Net-OAuth2-0.55/t/中的测试(除非我真的遗漏了什么)是关于使用Net :: OAuth2 webserver配置文件,这将(再次)是"客户端应用程序".
还有其他编写客户端的示例 - 连接到现有的OAuth2服务器,例如Google API的东西 - 但我找不到编写服务器的示例....(如果可以的话,我非常愿意使用RTFM 找到 FM ...指针赞赏!)
总体思路是让中央身份验证服务器处理凭据+令牌生成+策略处理(策略=>此应用程序是否由此授权用户授权)。
我们先来谈谈OAuth 服务器。
i) 服务器负责登录页面,用户可以在其中输入其凭据。
ii) 验证凭据,如果正确,则该服务器检查哪个客户端应用程序发出了调用,并验证“此应用程序是否由该用户授权”。- 这里涉及到范围的概念。
iii) 生成应用程序的访问令牌/授权代码。
iv) 当客户端使用访问令牌访问 API 时,API 应在内部将令牌传递到该服务器。该服务器的工作是验证令牌内容。
现在,API
i) API 应该接受来自客户端应用程序的令牌,将其传递到服务器 - 从服务器获取唯一的客户 ID,并将该客户的数据返回到客户端。
对于第 3 方应用程序,
i) 您需要有一个注册过程。客户端需要有客户端 ID 和秘密。Google 允许您在控制台中注册。
ii) 应该有一个映射到每个唯一 API 的范围。例如,当您制作 Google OAuth 应用程序时,您需要为您的应用程序注册一个范围 - 范围为 G+、picasa、google Drive 等。
iii) 访问令牌对于范围而言是唯一的,并映射到用户授予您的应用程序的权限。如果用户客户端应用程序仅选择 G+ 范围,并且由用户授予访问权限 - 该应用程序只能将令牌用于 G+ 端点。
有关如何实现 OAuth 服务器的更详细的答案可以在这里找到:高效的 OAuth2.0 服务器/提供程序如何工作?