我正在实施一个OAuth提供程序来保护不同的基于Web的API。最让我头疼的是让我通过OAuth保护WebSockets。
是否可以在浏览器中设置的客户端中完全安全地完成?
与带有服务器的 Web 应用程序相比,它在浏览器中有什么风险?
我想使用两方 OAuth 来限制与 websocket 的连接,因此只有注册的客户端才能获取与 API 的 WebSocket 连接而不会被拒绝。由于WebSocket连接始终(!)在客户端(从浏览器)建立,是否有可能保护accessToken不被窃取和滥用?
此时,从 Web 应用程序客户端配置设置基于浏览器的客户端的唯一内容是 URL。
如果基于浏览器的应用程序不安全,我可以接受,但我想确保至少基于 Web 的应用程序有一种安全的方式来访问 websocket。
但是在这一点上,我问自己是否需要accessToken,因为我只能使用origin-URI作为唯一的安全机制。
是的,您可以使用OAuth保护您的WebSocket连接。Kaazing WebSocket Gateway具有优雅的架构,用于使用各种方法(基于令牌,基于HTTP或基于cookie)进行身份验证和授权。
此外,它是以在 Web 上安全的方式完成的,您可能正在处理不受信任的客户端。(或者至少,您应该始终假设您正在处理不受信任的客户端。
当客户端尝试 WebSocket 连接时,网关会收到请求。如果特定服务(即 URL)已配置为受保护,则客户端将受到质询。
收到质询后,客户端需要提供一个令牌(假设这是本例中配置的令牌)。如果客户端已经拥有令牌 - 因为他们之前已经登录到其他系统或网页 - 那就太好了。如果不是,则必须获得一个。这完全取决于您对安全性的选择。在这种情况下,它会联系 OAuth 令牌提供程序以获取令牌。这可能意味着用户必须提供凭据。
一旦客户端有了令牌,它就会将其发送到网关作为对质询的响应。网关支持标准 JAAS 体系结构,因此您可以插入登录模块来执行必要的认证。在这种情况下,它可能会将令牌发送到令牌提供程序,以确定它是否是有效的令牌。
如果是,则 WebSocket 连接已打开并可以继续。否则,将拒绝请求并关闭连接。
这样做的好处是可以保护您的后端应用程序 - 只有有效用户才能通过网关。此外,由于Kaazing WebSocket Gateway可以位于DMZ中,因此未经身份验证的用户甚至永远不会进入主防火墙内的受信任网络。他们在外面失败得很快。
这种架构功能强大,因为无论您选择哪种安全框架,Kaazing 的网关都会插入其中,而不是将自己的安全机制强加给您。此外,在 OAUth 或 OAuth2 的情况下,它不需要理解或解码令牌。令牌提供者是唯一需要理解它的人。但是,如果您的令牌提供商想要指定会话的持续时间,则可以将其与令牌一起包含在内,网关将遵循该持续时间。
如果基于浏览器的应用程序不安全,我可以接受,但我想确保至少基于 Web 的应用程序有一种安全的方式来访问 websocket。
通过正确的架构和实施,可以确保基于 Web 和基于浏览器的应用程序变得安全。在Kaazing,我们始终假设您正在与Web上不受信任的客户打交道,并相应地构建我们的架构。
以下是文档的几个部分,它们具有高级说明:
- 身份验证期间会发生什么
- 身份验证和授权如何与网关配合使用
问候知更鸟产品经理,Kaazing
凭据授予的安全性取决于在分发访问令牌之前执行的身份验证。 这超出了他们所说的规格。 因此,这取决于您决定在分发令牌以响应凭据授予之前放置的任何身份验证制度。
现在,假设您已经设置了一种很好的安全方法来获取凭据授予,或通过常规 OAuth2 请求将访问令牌获取到浏览器中。
在 OAuth2 规范下,您可以自由地以多种方式对部分进行 MAC 摘要、加密部分或保护该令牌中的数据。 浏览器中访问令牌的安全性取决于它包含的信息 - 通常人们将其设计为包含最少的信息(userid,过期时间,版本,摘要),并使其可由您的服务器自我验证(因此摘要)。 令牌的内容实际上是任意的。 一些系统甚至提供访问"代码"作为令牌的代理。
现在,假设您有一个受保护的"安全格式"访问令牌,但有时间限制。让我们考虑一个真实的例子:Facebook及其OAuth2实现。 无论是完全访问令牌还是用于服务器端凭据检索的访问代码(每个都有时间限制),您都可以使用 Kaazing 网关从浏览器发送令牌(或代码)以保护对 WebSocket 的访问。
我从使用 Kaazing 的网关中学到的一件事是,OAUth2 实际上不会保护任何东西 - 您可以自由分发任意形式的访问令牌。 最好确保您的凭据身份验证方案、access_token格式和access_token生存期都是良好的策略决策 - 然后您就可以获得安全性。
Kaazing 网关将允许您将任意令牌发送到网关,并使用您编写的 JAAS 登录模块对其进行验证。 政权的安全取决于你和政策决定。
问候
史蒂文·阿特金森
网关服务器开发人员,卡孜