单页应用程序的身份验证
Authentication for single-page apps
背景
我正在查看 OAuth 2.0 隐式授权流程,其中用户被重定向到身份验证服务并且 JWT 令牌被发回单页应用程序 (SPA)。令牌存储在 cookie 或本地存储中,在我看到的示例中,应用程序将 hide/show 某些页面基于它是否可以在存储中找到令牌。
问题
问题在于,在所有示例中(来自服务提供商的官方),我能够手动将任何随机但格式正确的令牌添加到浏览器的本地存储中,并可以访问 'secured' 页面。
有人向我解释说您不能在 SPA 中验证令牌,因为这需要公开客户端机密,您应该在 API 服务器上验证令牌。这意味着您可以 'hide' 这些页面,但如果有人愿意,真的很容易看到它们。话虽如此,你不太可能造成任何真正的损害,因为任何数据检索或操作都需要通过 API 服务器,并且令牌应该在那里验证。
这并不是一个真正的漏洞,但我看到的文档和示例并未明确涵盖这种细微差别,我认为这可能会导致天真的程序员(比如我自己)认为某些页面是完全安全的,而实际上并非如此确实如此。
问题
如果比我更了解情况的人确认这确实是 SPA 身份验证的工作方式,我们将不胜感激?
我还算不上专家,不过这方面我玩过一点space。我的印象是你是对的,任何 showing/hiding 仅基于令牌存在的功能都很容易被欺骗。您的 SPA 当然可以进入 verifying an access token。
但这可能只会让欺骗变得更具挑战性。如果有人想假装客户端认为它有一个有效的令牌,他们可能会操纵客户端 JS 来做到这一点。不幸的是,这就是客户端 JS 的本质。大部分代码都可以在浏览器中操作。
到目前为止,这是为了防止用户看到 UI/UX。大多数应用程序只有在有数据填充其 UI 时才有用。这就是 API 访问令牌策略仍然有效的地方。服务器将验证令牌,如果没有令牌,则不会向客户端提供任何数据。
因此,尽管不幸的是 JS 很容易被欺骗和操纵以显示开发人员不愿公开的内容,但这通常不会破坏交易。如果您有一些不需要数据的很棒的 UI 功能,并且您需要保护对 UI 本身的访问,那么这个模型可能不是最好的。
背景
我正在查看 OAuth 2.0 隐式授权流程,其中用户被重定向到身份验证服务并且 JWT 令牌被发回单页应用程序 (SPA)。令牌存储在 cookie 或本地存储中,在我看到的示例中,应用程序将 hide/show 某些页面基于它是否可以在存储中找到令牌。
问题
问题在于,在所有示例中(来自服务提供商的官方),我能够手动将任何随机但格式正确的令牌添加到浏览器的本地存储中,并可以访问 'secured' 页面。
有人向我解释说您不能在 SPA 中验证令牌,因为这需要公开客户端机密,您应该在 API 服务器上验证令牌。这意味着您可以 'hide' 这些页面,但如果有人愿意,真的很容易看到它们。话虽如此,你不太可能造成任何真正的损害,因为任何数据检索或操作都需要通过 API 服务器,并且令牌应该在那里验证。
这并不是一个真正的漏洞,但我看到的文档和示例并未明确涵盖这种细微差别,我认为这可能会导致天真的程序员(比如我自己)认为某些页面是完全安全的,而实际上并非如此确实如此。
问题
如果比我更了解情况的人确认这确实是 SPA 身份验证的工作方式,我们将不胜感激?
我还算不上专家,不过这方面我玩过一点space。我的印象是你是对的,任何 showing/hiding 仅基于令牌存在的功能都很容易被欺骗。您的 SPA 当然可以进入 verifying an access token。 但这可能只会让欺骗变得更具挑战性。如果有人想假装客户端认为它有一个有效的令牌,他们可能会操纵客户端 JS 来做到这一点。不幸的是,这就是客户端 JS 的本质。大部分代码都可以在浏览器中操作。
到目前为止,这是为了防止用户看到 UI/UX。大多数应用程序只有在有数据填充其 UI 时才有用。这就是 API 访问令牌策略仍然有效的地方。服务器将验证令牌,如果没有令牌,则不会向客户端提供任何数据。
因此,尽管不幸的是 JS 很容易被欺骗和操纵以显示开发人员不愿公开的内容,但这通常不会破坏交易。如果您有一些不需要数据的很棒的 UI 功能,并且您需要保护对 UI 本身的访问,那么这个模型可能不是最好的。