我是一个宁静的网络服务提供商。我的服务被其他第三方使用,因此我决定为我的服务添加安全性。当我瞪眼时,我发现一些网站正在提供基于角色的访问;即JAAS以外的认证和授权。有替代品吗?
答案 0 :(得分:2)
您可以使用以下方法之一保护RESTful Web服务,以支持身份验证,授权或加密:
使用web.xml
部署描述符保护RESTful Web服务,就像使用其他Java EE Web应用程序一样。有关完整的详细信息,请参阅"开发安全Web应用程序"在Oracle WebLogic Server的编程安全性中。
例如,要使用基本身份验证保护RESTful Web服务,请执行以下步骤:
为您计划保护的每组RESTful资源(URI)定义<security-constraint>
。
使用<login-config>
元素定义要使用的身份验证类型以及将应用安全性约束的安全领域。
使用<security-role>
标记定义一个或多个安全角色,并将它们映射到步骤1中定义的安全性约束。有关详细信息,请参阅&#34; security-role&#34;在Oracle WebLogic Server的编程安全性中。
要启用加密,请添加<user-data-constraint>
元素并将<transport-guarantee>
子元素设置为CONFIDENTIAL
。有关更多信息,请参阅&#34; user-data-constraint&#34;在Oracle WebLogic Server的编程安全性中。
有关详细信息,
示例5-1使用基本身份验证保护RESTful Web服务
<web-app>
<servlet>
<servlet-name>RestServlet</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>RestServlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
<security-constraint>
<web-resource-collection>
<web-resource-name>Orders</web-resource-name>
<url-pattern>/orders</url-pattern>
<http-method>GET</http-method>
<http-method>POST</http-method>
</web-resource-collection>
<auth-constraint>
<role-name>admin</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>BASIC</auth-method>
<realm-name>default</realm-name>
</login-config>
<security-role>
<role-name>admin</role-name>
</security-role>
</web-app>
示例5-2使用SecurityContext保护RESTful Web服务
package samples.helloworld;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.SecurityContext;
import javax.ws.rs.core.Context;
...
@Path("/stateless")
@Stateless(name = "JaxRSStatelessEJB")
public class StlsEJBApp {
...
@GET
@Produces("text/plain;charset=UTF-8")
@Path("/hello")
public String sayHello(@Context SecurityContext sc) {
if (sc.isUserInRole("admin")) return "Hello World!";
throw new SecurityException("User is unauthorized.");
}
示例5-3使用SecurityContext保护RESTful Web服务
package samples.helloworld;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.annotation.Security.RolesAllowed;
@Path("/helloworld")
@RolesAllowed({"ADMIN", "ORG1"})
public class helloWorld {
@GET
@Path("sayHello")
@Produces("text/plain")
@RolesAllows("ADMIN")
public String sayHello() {
return "Hello World!";
}
}