为第三方服务访问保护 rest api 的最佳实践

Best practice for securing rest api for third party service access

背景:作为遗留 asp.net 网络表单应用程序实施的 SaaS 产品。有一个关联的 api 提供对某些数据的 read/write 访问。此 Api 供内部使用和供第三方访问。这些第三方是我们客户(资源所有者)的供应商。例如,供应商 123 从客户 ABC 读取订单数据。供应商访问是无用户的,即机器对机器,他们对我们的。

api 目前使用 oauth 2.0 ROPC 流程(资源所有者密码凭证 - “密码”授权类型)保护我们在客户的要求。用户名、密码、客户端 ID 和客户端机密随后“以某种方式”传达给供应商,供应商随后使用这些供应商获取 api.

的访问令牌和刷新令牌

在某些情况下,我们将无法再使用此 ROPC 流程,因此不再推荐使用。

ROPC应该用什么代替?此场景的当前最佳做法是什么?

流量

供应商应使用 client credentials flow,并且应为每个供应商提供不同的凭据,以便您可以随时管理访问权限。最简单的 CC 形式使用纯字符串客户端密码,因此很容易从 ROPG 迁移到。

客户端凭据流还有 2 个常用的高安全性选项,用于强大的 B2B 身份验证,通常用于金融级设置:

这两者结合了 PKI 和 JWT 访问令牌。即使您现在可能不需要高安全性选项,了解模式和未来的可能性也是有好处的。

索赔

流程完成后,我的目标是设计一个有用的 ClaimsPrincipal 来控制 API 代码。这些字段感觉合适:

clientId: t6efbu6
tenantId: ABC
vendorId: 123
scope: orders_write

您可能无法将所有这些都包含在物理访问令牌中,并且令牌发行者可能无法使用某些数据,但无论如何都应致力于生成有用的 ClaimsPrincipal。

内部客户可能存在不同的声明。所有这些都将使 API 能够正确授权,只需要简单的代码。