我正在维护SReview,这是一个基于Moholicious的Web应用程序,它需要运行许多后台任务,这些任务需要更改数据库状态。这些作业需要大量的CPU时间,并且有很多时间,因此,根据安装的大小,最好让多台计算机运行这些后台作业。即便如此,可以访问数据库的计算机数量还是非常有限的,因此目前我正在使用直接PostgreSQL连接直接使它们访问数据库。
这可行,但是有时后台作业可能需要在敌对网络另一端的某个地方运行,因此,可能不希望只需要一个额外的开放网络端口来访问数据库。因此,我正在考虑实现某种基于Web的RPC协议(可能使用JSON),并使用OAuth2保护访问。但是,我之前从未详细讨论过该协议,因此可以使用一些指导来确定使用哪种授权流程。
可以通过两种方式向运行这些后台作业的计算机提供所需的凭据:
哪种资助流程最能支持这两种模式?
答案 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端点的每个客户端调用都将包含一个有效的访问令牌,您可以使用令牌自省(或任何特定的所需方法)对其进行验证。