Java API For WebSocket(八)服务器安全
2015-01-13 17:37
295 查看
WebSocket终结点使用web容器安全模式进行安全管理,目的是方便websocket开发者声明是否需要访问websocket服务器终结点进行认证,以及哪些人能访问它,是否需要加密连接。websocket在部署中使用ws://URI(第三章,第四章所述)保护模式进行映射,但使用http://URI相同的主机名称,端口号和路径进行访问,因为这是开放式握手的URL。因此,websocket开发人员可能分配一个身份验证方案,用户角色授权访问和传输保证到达websocket端点。
8.1 WebSocket身份认证
本规范没有定义websocket本身可以验证机制,而是在servlet上建立安全机制,定义websocket必须通过开放式握手请求通过身份验证,旨在发起一个连接之前验证。通常这由web应用中的包含websocket的在开放式握手websocket之前的Http身份认证(也许是基本的或基于表单的)完成的。
如果客户端发送一个没有经过身份认证的开放式握手请求到受安全机制保护的websocket中,websocket实现会返回401(认证失败)到开放式握手请求,不再初始化websocket连接。
8.2 WebSocket授权
websocket授权可以通过web应用程序下的web.xml中添加<security-constraint>元素来实现。配置好子元素<url-pattern>规则后,websocket握手请求的URI必须匹配配置的URL格式。
8.3 传输保证
没有保证的传输必须要通过容器解释才能到达websocket,如未加密的ws:///连接。加密的传输保证必须通过实现解释,只允许加密的连接(wss://)访问websocket,但这有时需要预认证的请求。
8.4 示例
下面的实例代码是从一个大的web.xml部署文件中截取的一部分,里面包含websocket终结点安全规则的配置。本例中,所有的请求URI格式必须匹配“quotes/live”格式,而且只能通过wss://安全模式访问,这样只有属于黄金会员或者白金会员角色的授权用户才能访问。
8.1 WebSocket身份认证
本规范没有定义websocket本身可以验证机制,而是在servlet上建立安全机制,定义websocket必须通过开放式握手请求通过身份验证,旨在发起一个连接之前验证。通常这由web应用中的包含websocket的在开放式握手websocket之前的Http身份认证(也许是基本的或基于表单的)完成的。
如果客户端发送一个没有经过身份认证的开放式握手请求到受安全机制保护的websocket中,websocket实现会返回401(认证失败)到开放式握手请求,不再初始化websocket连接。
8.2 WebSocket授权
websocket授权可以通过web应用程序下的web.xml中添加<security-constraint>元素来实现。配置好子元素<url-pattern>规则后,websocket握手请求的URI必须匹配配置的URL格式。
8.3 传输保证
没有保证的传输必须要通过容器解释才能到达websocket,如未加密的ws:///连接。加密的传输保证必须通过实现解释,只允许加密的连接(wss://)访问websocket,但这有时需要预认证的请求。
8.4 示例
下面的实例代码是从一个大的web.xml部署文件中截取的一部分,里面包含websocket终结点安全规则的配置。本例中,所有的请求URI格式必须匹配“quotes/live”格式,而且只能通过wss://安全模式访问,这样只有属于黄金会员或者白金会员角色的授权用户才能访问。
<security-constraint> <web-resource-collection> <web-resource-name>LiveQuoteWebSocket</web-resource-name> <description>Security constraint for live quote websocket endpoint</description> <url-pattern>/quotes/live</url-pattern> <http-method>GET</http-method> </web-resource-collection> <auth-constraint> <description>definition of which roles may access the quote endpoint</description> <role-name>GOLD_MEMBER</role-name> <role-name>PLATINUM_MEMBER</role-name> </auth-constraint> <user-data-constraint> <description>WSS required</description> <transport-guarantee>CONFIDENTIAL</transport-guarantee> </user-data-constraint> </security-constraint>
相关文章推荐
- Java API For WebSocket(七)Java EE环境
- JSR 356, Java API for WebSocket
- Java API For WebSocket(一)简介
- JSR 356, Java API for WebSocket
- jax-rs(Java API for RESTful Web Services)实践教程 之二 —— get/post/put/delete/head
- jax-rs(Java API for RESTful Web Services) 实践教程 之五 —— 注入全局变量 和 rest的生命周期
- JAX-RS介绍——Java API forRESTful WebServices,JAX-RS的目标是Web Services开发(这与HTML Web应用不同)而Spring MVC的目标则是Web应用开发
- jax-rs(Java API for RESTful Web Services) 实践教程 之四 —— @Context注入HttpServletRequest 使REST保持状态!
- 正常的javaWEB项目在win7机器启动报错警告: RMI TCP Accept-59825: accept loop for ServerSocket[addr=0.0.0.0/0.0.0.0,p
- JAX-RS(Java API for RESTful Web Services)常用注解
- java使用socket实现一个多线程web服务器
- jax-rs(Java API for RESTful Web Services)实践教程 之二 —— get/post/put/delete/head
- jax-rs(Java API for RESTful Web Services) 实践教程 之一 —— 初探jax-rs
- 浅谈用java搭建web服务器之Socket编程——更好的理解Apache、Tomcat等软件的工作模式
- WebSocket for java
- javaWeb服务器socket实现
- 从NIO讲到JAVA NIO框架,web服务器比较,socket与HTTP区别
- 使用 JSR 356 API 构建 Java WebSocket 应用
- 通过一个Socket例子理解Http协议(实战Java Web服务器--使用HTTP协议和JAVA类实现)