gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 08:35:52 26 4
gpt4 key购买 nike

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

Perl Oauth2 package带我到 Net::OAuth2。

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

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

  • 在我看来,这是它的工作原理:
  • 客户端应用程序有一个 API key (注册到服务器(REST 服务器?身份验证服务器?),并“烘焙”到客户端)
  • 用户在服务器上的数据库表中有一个条目(用户名和密码)
  • 用户启动客户端应用程序,并尝试访问 protected 资源(比如更新一行)(再次,例如,通过在客户端中选择“做这件事”菜单选项;客户端将其转换为 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找到调频...指针表示赞赏!)

    最佳答案

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

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

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

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

    关于如何实现 OAuth 服务器的更详细的答案可以在这里找到:How would an efficient OAuth2.0 server / provider work?

    关于perl - 你如何在 Perl 中编写 OAuth2 服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16490138/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com