我应该使用哪种 OAuth2 授权类型?
Which OAuth2 grant type should I use?
我正在维护 SReview,这是一个基于 mojolicious 的网络应用程序,它需要 运行 大量需要更改数据库状态的后台任务。这些作业需要大量 CPU 时间,而且数量很多,因此根据安装的大小,使用多台机器 运行 这些后台作业可能是明智的。即便如此,能够访问数据库的机器数量相当有限,所以目前我让它们直接访问数据库,使用直接的 PostgreSQL 连接。
这行得通,但有时后台作业可能需要 运行 敌对网络另一端的某个地方,因此可能不太需要仅仅为了数据库访问而需要一个额外的开放网络端口。因此,我正在考虑实施某种基于 Web 的 RPC 协议(可能是 JSON 的东西),并使用 OAuth2 保护访问。但是,我以前从未详细使用过该协议,并且可以使用一些关于使用哪个授权流程的指导。
可以通过两种方式向 运行 执行这些后台作业的计算机提供所需的凭据:
- 作业调度程序能够为后台作业指定环境变量或命令行选项。然后,这些将以一种可以被认为是安全的方式传递给实际 运行 作业的机器。但是,这意味着在某些情况下,作业调度程序本身也需要通过 OAuth2 进行身份验证,最好是以一种可以随意重新启动的方式,而无需一次又一次地进行身份验证。
- 由于 运行 作业的机器数量可能相当有限,因此应该可以为每台机器创建机器凭据。然而,在那种情况下,能够在销售机器上并行 运行 多个会话是很重要的。
哪种资助流程最能支持这两种模式?
从您的场景概览来看,很明显交互发生在系统与系统之间。没有最终用户(人类)用户交互。
首先,鉴于您的应用程序是在安全环境(封闭)中执行的,因此可以将它们视为机密客户端。 OAuth 2.0 client types 对此进行更多解释。在此背景下,您可以为每个分布式应用程序组件分配一个客户端 ID 和一个客户端密码。
关于补助金类型,首先我欢迎您熟悉所有可用的选项。这可以通过 Obtaining Authorization 部分来完成。简而言之,它解释了应用程序获取令牌(特别是访问令牌)的不同方式,这些令牌可用于调用 OAuth 2.0 保护端点(在您的情况下为 RPC 端点)。
对您来说,最好的资助类型是 client credential grant。它专为与 OAuth 2.0 保护端点预先建立信任的客户端而设计。此外,与其他授权类型相比,它不需要浏览器(用户代理)或最终用户。
最后,您需要使用 OAuth 2.0 授权服务器。这将注册不同的分布式客户端并向它们发布客户端 ID、机密。当客户端需要获取令牌时,他们将使用令牌端点。并且您的 RPC 端点的每个客户端调用都将包含一个有效的访问令牌,您可以使用令牌自省(或任何特定的所需方法)对其进行验证。
我正在维护 SReview,这是一个基于 mojolicious 的网络应用程序,它需要 运行 大量需要更改数据库状态的后台任务。这些作业需要大量 CPU 时间,而且数量很多,因此根据安装的大小,使用多台机器 运行 这些后台作业可能是明智的。即便如此,能够访问数据库的机器数量相当有限,所以目前我让它们直接访问数据库,使用直接的 PostgreSQL 连接。
这行得通,但有时后台作业可能需要 运行 敌对网络另一端的某个地方,因此可能不太需要仅仅为了数据库访问而需要一个额外的开放网络端口。因此,我正在考虑实施某种基于 Web 的 RPC 协议(可能是 JSON 的东西),并使用 OAuth2 保护访问。但是,我以前从未详细使用过该协议,并且可以使用一些关于使用哪个授权流程的指导。
可以通过两种方式向 运行 执行这些后台作业的计算机提供所需的凭据:
- 作业调度程序能够为后台作业指定环境变量或命令行选项。然后,这些将以一种可以被认为是安全的方式传递给实际 运行 作业的机器。但是,这意味着在某些情况下,作业调度程序本身也需要通过 OAuth2 进行身份验证,最好是以一种可以随意重新启动的方式,而无需一次又一次地进行身份验证。
- 由于 运行 作业的机器数量可能相当有限,因此应该可以为每台机器创建机器凭据。然而,在那种情况下,能够在销售机器上并行 运行 多个会话是很重要的。
哪种资助流程最能支持这两种模式?
从您的场景概览来看,很明显交互发生在系统与系统之间。没有最终用户(人类)用户交互。
首先,鉴于您的应用程序是在安全环境(封闭)中执行的,因此可以将它们视为机密客户端。 OAuth 2.0 client types 对此进行更多解释。在此背景下,您可以为每个分布式应用程序组件分配一个客户端 ID 和一个客户端密码。
关于补助金类型,首先我欢迎您熟悉所有可用的选项。这可以通过 Obtaining Authorization 部分来完成。简而言之,它解释了应用程序获取令牌(特别是访问令牌)的不同方式,这些令牌可用于调用 OAuth 2.0 保护端点(在您的情况下为 RPC 端点)。
对您来说,最好的资助类型是 client credential grant。它专为与 OAuth 2.0 保护端点预先建立信任的客户端而设计。此外,与其他授权类型相比,它不需要浏览器(用户代理)或最终用户。
最后,您需要使用 OAuth 2.0 授权服务器。这将注册不同的分布式客户端并向它们发布客户端 ID、机密。当客户端需要获取令牌时,他们将使用令牌端点。并且您的 RPC 端点的每个客户端调用都将包含一个有效的访问令牌,您可以使用令牌自省(或任何特定的所需方法)对其进行验证。