我应该使用哪种OAuth2授权类型?

时间:2019-02-09 07:52:28

标签: perl oauth-2.0 mojolicious

我正在维护SReview,这是一个基于Moholicious的Web应用程序,它需要运行许多后台任务,这些任务需要更改数据库状态。这些作业需要大量的CPU时间,并且有很多时间,因此,根据安装的大小,最好让多台计算机运行这些后台作业。即便如此,可以访问数据库的计算机数量还是非常有限的,因此目前我正在使用直接PostgreSQL连接直接使它们访问数据库。

这可行,但是有时后台作业可能需要在敌对网络另一端的某个地方运行,因此,可能不希望只需要一个额外的开放网络端口来访问数据库。因此,我正在考虑实现某种基于Web的RPC协议(可能使用JSON),并使用OAuth2保护访问。但是,我之前从未详细讨论过该协议,因此可以使用一些指导来确定使用哪种授权流程。

可以通过两种方式向运行这些后台作业的计算机提供所需的凭据:

  1. 作业调度程序可以为后台作业指定环境变量或命令行选项。然后,这些将以可以被认为是安全的方式传递到实际运行作业的机器上。但是,这意味着在某些情况下,作业调度程序本身也需要使用OAuth2进行身份验证,最好采用一种方式,即可以随意重新启动它,而不必一次又一次地进行身份验证。
  2. 由于运行作业的计算机数量可能相当有限,因此应该有可能为每台计算机创建计算机凭证。但是,在那种情况下,能够在销售机器上并行运行多个会话非常重要。

哪种资助流程最能支持这两种模式?

1 个答案:

答案 0 :(得分:2)

从您的方案概览中可以清楚地看到,系统之间会发生交互。没有最终用户(人类)用户交互。

首先,假设您的应用程序在安全的环境中(封闭)执行,则可以将它们视为机密客户端。 OAuth 2.0 client types对此进行详细说明。在这种背景下,您可以为每个分布式应用程序组件提供一个客户端ID和一个客户端密码。

关于赠款类型,首先,我欢迎您熟悉所有可用的选项。这可以通过浏览Obtaining Authorization部分来完成。简单地说,它解释了应用程序获取令牌(特别是访问令牌)的不同方式,这些令牌可用于调用受OAuth 2.0保护的端点(在您的情况下为RPC端点)。

对您来说,最佳资助类型为client credential grant。它是为具有与OAuth 2.0保护的端点的预先建立的信任关系的客户端而设计的。与其他授权类型相比,它也不需要浏览器(用户代理)或最终用户。

最后,您将需要使用OAuth 2.0授权服务器。这将注册不同的分布式客户端,并向其颁发客户端ID和机密。当客户要求获得令牌时,他们将消耗令牌端点。而且,RPC端点的每个客户端调用都将包含一个有效的访问令牌,您可以使用令牌自省(或任何特定的所需方法)对其进行验证。