是否可以将 OAuth UI 端实现为具有自己后端的 SPA?

use*_*521 6 oauth csrf

我们将使用 Ory Hydra 作为 OAuth 服务器,但我们必须实现我们自己的 UI 部分(登录页面)。以下是 Ory Hydra 文档的示例实现https://www.ory.sh/Hydra/docs/guides/login#implementing-the-login-html-form。然而,使用服务器端渲染的 HTML 来作为登录页面对我们来说非常不方便。相反,我们更愿意将其实现为 SPA + API。因此,在 auth.mycompany.com/login 上,SPA 会调用(ajax)POST auth.mycompany.com/api/login(而不是进行顶级导航 POST)。该API将调用Hydra管理API。然后,如果成功,SPA 将收到响应中的重定向 URL(从 Ory Hydra 管理 API 返回),它将重定向用户(前端重定向而不是 HHTP 重定向)。

从安全角度来看,将 OAuth 登录页面实现为 SPA/API 而不是服务器端呈现的 HTML 是否有任何缺点?我正在考虑 CSRF(服务器端呈现的 HTML 可以通过注入表单的 CSRF 令牌返回),但据我所知,它也可以使用 SPA + API 安全地完成?

我正在特别考虑从 CloudFront 提供的 SPA,而 /api/* 请求将在 CloudFront 上配置为反向代理到 API 服务器。

我看到的每个 OAuth 登录页面(例如 id.heroku.com、使用 github 登录、使用 google 登录)都在服务器端呈现,并进行顶级导航而不是 ajax 请求。但我不确定这是因为这是推荐的,还是只是因为他们使用服务器端渲染的 HTML 技术。