【问题标题】:Which OAuth2 grant type should I use?我应该使用哪种 OAuth2 授权类型?
【发布时间】:2019-02-09 07:52:27
【问题描述】:

我正在维护 SReview,这是一个基于 mojolicious 的 web 应用程序,它需要运行大量需要更改数据库状态的后台任务。这些作业需要大量的 CPU 时间,而且数量很多,因此根据安装的大小,让多台机器运行这些后台作业可能是明智的。尽管如此,可以访问数据库的机器数量还是相当有限的,所以目前我让它们直接访问数据库,使用直接的 PostgreSQL 连接。

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

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

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

哪种拨款流程最能支持这些模型中的任何一种?

【问题讨论】:

    标签: perl oauth-2.0 mojolicious


    【解决方案1】:

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

    首先,鉴于您的应用程序在安全环境(封闭)中执行,它们可以被视为机密客户端。 OAuth 2.0 client types 对此进行更多解释。在此背景下,您可以为每个分布式应用程序组件颁发客户端 ID 和客户端密码。

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

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

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

    【讨论】:

      猜你喜欢
      • 2017-07-22
      • 1970-01-01
      • 2019-04-13
      • 1970-01-01
      • 2020-03-13
      • 2021-03-17
      • 1970-01-01
      • 2018-07-05
      • 2017-06-10
      相关资源
      最近更新 更多