【发布时间】:2023-03-05 18:43:01
【问题描述】:
我有一个自定义 OAuth 2.0 身份验证服务器与我的安全 API 一起部署。我还有一个由 nginx 部署作为静态内容交付的单页应用程序。我现在面临的问题是如何在没有活动后端来代理密码授权的情况下对该 SPA 的用户进行身份验证——我显然无法在 SPA 中嵌入客户端密码。
此类问题有哪些解决方案?
我发现资源所有者密码凭据授予可能正是我想要的。通过使用它,我将能够使用已建立的客户端 ID 直接从我信任的 SPA 发送用户名和密码凭据。如果我将此授权限制为仅对该特定客户端有效并验证请求的来源,我可以认为这是一个合理的折衷方案。
然后我的问题就变成了,我如何创建这个客户端和必要的关联用户?这是否意味着我的系统中有一些特殊的用户帐户与这个关联的特权客户端有关? OAuth 2.0 似乎暗示客户端必须与某种用户相关联。在部署我的应用程序时,我是否会为这些特殊的用户和客户端对象播种?那安全吗?
【问题讨论】:
-
你检查过隐式流吗?这是通常用于 SPA 的一种。
-
@JánHalaša,我有。这是我最初的假设,但我相信这仍然需要对最终用户进行重定向,这不正确吗?
-
是的,首先您将用户转发到 OAuth2 服务器,然后它会返回您提供的 redirectUrl。您会在重定向 URL 的哈希部分获得访问令牌。重定向有问题吗?
-
@JánHalaša,不,我想我没有更多的想法。我的主要困惑更多是如何独立部署这两个应用程序,同时确保客户端始终知道其客户端 ID 应该是什么。我应该只使用我的 SPA 将使用的预先建立的客户端来为我的授权服务器播种吗?
标签: security nginx oauth oauth-2.0 single-page-application