用于服务器到服务器通信的 Oauth2 授权

Oauth2 grant for server-to-server communication

我在微服务架构中工作,它有自己的 oauth2 提供程序以允许服务交互。

我需要开发一个被授权访问用户资源的服务,以便对用户帐户执行内部任务。由于需要访问用户资源的服务是内部服务,因此要求用户允许访问他们自己的资源并不是一个可行的解决方案。

我担心选择正确的授权来执行此任务,因为 client_credentials 似乎是正确的,它似乎也用于只允许更新服务数据,而不是访问用户资源。我想到的另一个解决方案是在用户注册时自动提供授权码,就像用户单击了 "allow" 按钮一样,然后使用该 code 授权执行请求。这里的缺点是每次创建具有该需求的服务时我都必须创建新的授权码,但这似乎是一个更清晰的解决方案(因为用户 XXX 的授权码只允许访问用户 XXX 的资源)。

我也明白实现是不同的,因为标准提供了很大的灵活性,但是 您认为哪一个是合适的解决方案?你会怎么处理?更清楚地说,"statistic service" 被允许访问所有用户资源,还是 "statistic service" 被所有用户授予访问他们的资源?

正如您所说,这是一个内部用例,您可以控制受资源服务器、授权服务器和访问资源的客户端保护的资源,因此您可以选择使用 client_credentials 来访问用户数据。

它相当于(或实际上是)可用于操纵用户数据的 "service account"。如果该服务在您的控制之下并且您信任它,即您相信它不会将其凭据泄露给其他方并且不会滥用其权力,那么就可以了。由于您还控制客户端,所以这不是问题。