2012-04-26 56 views
15

我正在实施OAuth提供程序以保护不同的基于Web的API。最头痛的是让我通过OAuth保护WebSockets。是否可以使用OAuth 2.0来保护WebSocket API?

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

如果它在浏览器中与使用服务器的Web应用程序相比有什么风险?

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

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

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

回答

8

是的,你可以使用OAuth保护你的WebSocket连接。 Kaazing WebSocket Gateway拥有优雅的体系结构,可使用各种方法(基于标记,基于HTTP或基于cookie)进行身份验证和授权。

此外,它是以一种安全的方式在Web上进行,您可能正在处理不受信任的客户端。 (或者至少,您应该始终假设您正在处理不可信的客户端。)

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

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

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

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

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

该体系结构非常强大,因为您选择的安全框架并不重要,Kaazing的Gateway将插入它,而不是将自己的安全机制强加给您。而且,在OAUth或OAuth2的情况下,它不需要理解或解码令牌。令牌提供者是唯一需要理解它的人。但是如果您的令牌提供者想要为会话指定一个持续时间,那么它可以与令牌一起包含在内,并且网关将会遵守它。

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

基于Web和基于浏览器的应用程序可以通过正确的体系结构和实现来实现安全。在Kaazing,我们总是假设您正在处理Web上不受信任的客户端,并据此构建我们的体系结构。

下面是有一个高层次的描述文档的几个部分:

问候, 罗宾 产品经理的Kaazing

+0

这是否需要用户验证一个很好的解决方案,但我不能肯定它是否工作,如果只有客户端需要在oauth-2草案http://tools.ietf.org/html/draft-ietf-oauth-v2-25#section-4.4中的客户端凭据授权中进行验证。它还表示它只能用于机密客户。但即使你有一个机密的客户端,然后你发送了accesstoken到浏览器(建立ws连接),它也被暴露了。所以为了保护它免受重复使用,你必须允许这个accessToken只用于很短的时间或限制访问权限。 – JustGoscha 2012-04-27 10:01:10

2

一凭据授权只与执行的认证一样安全在分发访问令牌之前。这超出了他们所说的规格。这取决于您决定在响应证书授予时给予令牌前的任何身份验证机制。

现在,假设您已经设置了一个安全的方式来获得您的凭据授权,或通过常规的OAuth2请求将访问令牌存入浏览器。

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

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

我从与Kaazing的门户合作中解脱出来的一件事是,OAUth2确实没有任何保证 - 您可以随意发放任意形式的访问令牌。确保您的凭证认证方案,access_token格式和access_token生命周期都是良好的策略决策是一个不错的主意,那么您就可以获得安全性。

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

问候,

史蒂芬·阿特金森

网关服务器开发者, 的Kaazing

相关问题