23

我正在实施一个 OAuth 提供程序来保护不同的基于 Web 的 API。最让我头疼的是通过 OAuth 保护 WebSockets。

它可以在浏览器中设置的客户端中完全安全地完成吗?

与带有服务器的 Web 应用程序相比,如果它位于浏览器中,有哪些风险?

我想使用 2-legged OAuth 来限制与 websocket 的连接,因此只有注册的客户端才能获取到 API 的 WebSocket 连接而不会被拒绝。由于 WebSocket 连接始终(!)在客户端(来自浏览器)上建立,是否可以保护 accessToken 不被盗和滥用?
此时,唯一从 Web 应用程序客户端应用程序设置基于浏览器的客户端的是 URL。

如果基于浏览器的应用程序不安全,我可以忍受,但我想确保至少基于 Web 的应用程序具有访问 websocket 的安全方式。

但那时我问自己是否需要 accessToken,因为我可以只使用 origin-URI 作为唯一的安全机制。

4

2 回答 2

9

是的,您可以使用 OAuth 保护您的 WebSocket 连接。Kaazing WebSocket 网关具有优雅的架构,可使用多种方法(基于令牌、基于 HTTP 或基于 cookie)进行身份验证和授权。

此外,它以一种在 Web 上安全的方式完成,您可能正在与不受信任的客户端打交道。(或者至少,您应该始终假设您正在与不受信任的客户打交道。)

当客户端尝试 WebSocket 连接时,网关会接收请求。如果特定服务(即 URL)已被配置为受保护,则客户端将受到挑战。

收到挑战后,客户端需要提供一个令牌(假设在这种情况下已配置)。如果客户端已经拥有令牌——因为他们之前已经登录到其他系统或网页——那就太好了。如果没有,那么它必须获得一个。这完全取决于您选择的安全性。在这种情况下,它会联系 OAuth 令牌提供者以获取令牌。这可能意味着用户必须提供凭据。

一旦客户端拥有一个令牌,它就会将其发送到网关作为对质询的响应。网关支持标准 JAAS 架构,因此您可以插入登录模块来执行必要的身份验证。在这种情况下,它可以将令牌发送给令牌提供者以确定它是否是有效令牌。

如果是,则 WebSocket 连接已打开并可以继续。如果不是,则拒绝请求并关闭连接。

这有利于保护您的后端应用程序——只有有效用户才能通过网关。此外,由于 Kaazing WebSocket 网关可以存在于 DMZ 中,未经身份验证的用户甚至永远不会进入主防火墙内的可信网络。他们在外面很快就失败了。

这种架构非常强大,因为无论您选择什么安全框架,Kaazing 的网关都会插入其中,而不是将其自己的安全机制强加给您。此外,在 OAUth 或 OAuth2 的情况下,它不需要理解或解码令牌。令牌提供者是唯一需要了解它的人。但是,如果您的令牌提供者想要指定会话的持续时间,则可以将其与令牌一起包含在内,网关将接受它。

如果基于浏览器的应用程序不安全,我可以忍受,但我想确保至少基于 Web 的应用程序具有访问 websocket 的安全方式。

通过正确的架构和实现,可以使基于 Web 和基于浏览器的应用程序变得安全。在 Kaazing,我们始终假设您在 Web 上与不受信任的客户打交道,并相应地构建我们的架构。

以下是文档中包含高级描述的几个部分:

问候,Robin 产品经理,Kaazing

于 2012-04-27T08:31:11.670 回答
3

凭据授予仅与分发访问令牌之前执行的身份验证一样安全。这超出了他们所说的规范。因此,这取决于您决定在发放令牌以响应凭证授予之前放置的任何身份验证机制。

现在,假设您已经设置了一种很好的安全方式来获取您的凭据授权,或者通过常规 OAuth2 请求将访问令牌获取到您的浏览器中。

根据 OAuth2 规范,您可以自由地以任意数量的方式对部分进行 MAC 消化、加密部分或保护该令牌中的数据。浏览器中访问令牌的安全性取决于它包含的信息 - 人们通常将其设计为包含最少的信息(用户 ID、到期时间、版本、摘要)并使其可由您的服务器自我验证(因此是摘要) . 令牌的内容实际上是任意的。一些系统甚至提供访问“代码”作为令牌的代理。

现在让我们假设您有一个受保护的“安全格式”访问令牌,但有时间限制。让我们考虑一个真实的例子:Facebook 和他们的 OAuth2 实现。无论是完整的访问令牌还是用于服务器端凭证检索的访问代码(每个都有时间限制),您都可以使用 Kaazing 网关从浏览器发送令牌(或代码)以保护对 WebSocket 的访问。

我从使用 Kaazing 的网关中获得的一件事是 OAUth2 确实不保护任何东西 - 您可以随意分发任意形式的访问令牌。确保您的凭证身份验证方案、access_token 格式和 access_token 生命周期都是好的策略决策是一个好主意 - 这样您就可以获得安全性。

Kaazing 网关将允许您将任意令牌发送到网关并使用您编写的用于验证它们的 JAAS 登录模块来验证它们。政权的安全取决于您和政策决定。

问候,

史蒂文·阿特金森

网关服务器开发人员,Kaazing

于 2012-04-27T21:27:01.097 回答