来自同一服务器的 SPA 和 REST API 应该是两个不同的 OAuth 客户端吗?

Should a SPA and REST APIs from the same server be two different OAuth clients?

我已经阅读和搜索了几个小时,但没有明确的答案。

假设我有一个 SPA 客户端访问 REST APIs,并且它们由相同的服务提供,例如我通过转到 example.com 访问我的 SPA,SPA 进行的 REST API 调用是 example.com/api/orders。 SPA 和 REST API 需要两个单独的 OAuth 客户端注册吗?

从概念上讲,我正在登录一个应用程序,但我可以看出它们有何不同。例如,SPA 在登录后需要 redirect_url,并且是 'public client',而 REST API 不需要 redirect_url,可以是 'confidential client'。 (我可以看到如果我想向其他消费者开放 REST APIs,and/or 让 SPA 直接调用其他资源提供者,它会更加灵活)。

我相信我可以 免于注册一个 OAuth 客户端,但这是一种反模式还是出于安全原因严重反对?我只想在同一个站点上创建一个带有一些经过身份验证的 REST API 的简单 SPA,并且需要两个 OAuth 注册似乎有点过分了。

从概念上讲,您的前端和后端应该是不同的 OAuth2 客户端。但是,是的,你可以摆脱一个客户。

从安全的角度来看,拥有两个客户端可能更好。您可以为每个设置不同的安全约束 - public 客户端需要 PKCE,禁用来自网络外部的机密客户端请求等。

我会和两个客户一起去。即使你现在不需要他们中的任何一个有任何特别的东西,它可能会在以后发生并且创建一个额外的工作并不多客户.

还有另一种选择 - 仅使用后端客户端并使用会话 cookie 进行前端授权。