微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

你如何在Perl中编写OAuth2服务器?

我试图围绕OAuth2和Perl(即Net :: OAuth2) – 特别是为数据库设置RESTful API,以及使用它的应用程序.

Perl Oauth2 package带我到Net :: OAuth2.

尽可能接近我想知道的事情,我需要做几件事(如果我在某处的杂草中离开,请纠正我):

>服务器端:构建REST服务器(目前正在玩这个mojolicIoUs),它与数据库进行通信.
>服务器端:构建身份验证/授权服务器(??)
>客户端应用程序:使用WWW :: Mechanize(或某些此类)与REST服务器通信

在我的脑海中,这是它的工作原理:

>客户端应用程序有一个API密钥(在服务器上注册(REST服务器?Auth服务器?),并“烘焙”到客户端)
>用户在服务器上的数据库中的表中有一个条目(用户名和密码)
>用户启动客户端应用程序,并尝试访问受保护资源(例如更新行)(例如,再次通过在客户端中选择“执行此操作”菜单选项;客户端将其转换为REST API URI,例如http://the.rest.server/api/thisthing)
>服务器将客户端重定向到(服务器的)身份验证/授权位
>服务器,客户端和用户进行魔术OAuth舞蹈以验证用户身份
>服务器,客户端和用户进行另一次神奇的OAuth舞蹈,以确保用户有权查看该资源URI
>如果一切正常,服务器会将客户端重新定向到最初请求的资源URI(需要任何auth parms).

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

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

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

http://cpansearch.perl.org/src/MARKOV/Net-OAuth2-0.55/t/中的测试(除非我真的遗漏了一些东西)是关于使用Net :: OAuth2 webserver配置文件,它将(再次)成为“客户端应用程序”.

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

解决方法

一般的想法是让中央auth服务器处理凭证令牌生成策略处理(policy =>是此用户授权的此应用程序).

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

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

对于第三方应用,
i)您需要进行注册过程.客户需要拥有客户端ID和秘密. Google允许您在console注册.
ii)应该有一个范围映射到每个唯一的API.例如,当您制作Google OAuth应用时,您需要为范围注册您的应用 – 范围为G,picasa,Google驱动器等.
iii)访问令牌对范围是唯一的,并映射到用户授予您的应用程序的权限.如果用户客户端应用程序仅选择G范围,并且被用户授予访问权限 – 则应用程序只能将该令牌用于G端点.

有关如何实施OAuth服务器的更详细解答,请访问:How would an efficient OAuth2.0 server / provider work?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐