java中的Restful Web应用程序(安全性)

Posted

技术标签:

【中文标题】java中的Restful Web应用程序(安全性)【英文标题】:Restful Web application (security) in java 【发布时间】:2015-10-26 13:47:51 【问题描述】:

我们正在开发两个网络应用程序 应用程序 A:在 glassfish 服务器上运行的 Restful Web 服务。 应用程序 B:在 Tomcat 服务器上运行的动态 Web 应用程序。

我仅通过我的 Application B 访问 Application A ,我不希望任何其他应用程序访问我的 Application A 。为此,我计划在各自的服务器上安装一个客户端服务器证书,这样我的应用程序 A 只能由我的应用程序 B 访问,我想阻止其他应用程序访问我的应用程序 A。你能告诉我如何在各自的服务器上安装客户端-服务器证书????

如果有人有更好的选择来获得这个,那么请解释一下。

如果可能,请举例说明。

谢谢

【问题讨论】:

*** 不是代码编写服务。到目前为止你尝试了什么?您的具体问题/问题是什么? 安全总是要付出代价的,你愿意付多少钱(或者由于外部要求需要支付),我的意思是,处理金融交易可能会有其他安全限制,然后分享照片。你能详细说明你的问题和限制吗? 我已经尝试使用令牌系统,方法是在请求中添加安全标头并在 glassfish 服务器端的 restful web 应用程序中使用过滤器来验证来自数据库的每个请求都可以正常工作,但由于每个请求令牌都有可能存在性能问题由restful webapp的过滤器检查...所以我想知道是否有任何其他解决方案..我发现可以使用客户端-服务器证书但不知道如何使用它。 【参考方案1】:

您在寻找身份验证和授权吗?如果是的话,你可以使用弹簧安全。如果您正在寻找仅具有某些用户 ID 和密码的身份验证(根级别访问),请使用基本身份验证。它将检查用户是否有效并且可以访问 url。

有关代码和更多信息,请查看网址。

how to implements Basic Authentication?

How to consuming RESTful webservices with basic authentication?

【讨论】:

我没有使用 spring 框架。我在 JQuery 和 Ajax 的帮助下通过 JSP 直接访问 RestWebServices 进行基本身份验证。它适用于任何 Web 框架。【参考方案2】:

当您使用 Java 时,我假设您使用的是 Spring Framework,如果是这样,您可以使用 Spring Session 在应用程序之间共享身份验证

【讨论】:

我没有使用 spring 框架。我在 JQuery 和 Ajax 的帮助下通过 JSP 直接访问 RestWebServices。【参考方案3】:
    我有一些示例代码,它们使用纯 java 进行简单和基本的身份验证。它可能适合您的需求。 使用邮递员设置和取消设置基本身份验证来测试它。 好处:简单。不需要除 javax.ws.rs.* 以外的任何东西 只有当您对应用程序 B 有 100% 的控制权时才可以(这与我的项目相同),它是一个内部应用程序(不是公共访问的网页)

代码:

//  to inject request 
@Context
private HttpServletRequest request; 

@GET
@Path("/testAuth")
@Produces(MediaType.APPLICATION_JSON)
public Response testAuth() 
    // TODO 
    // this is only a template for doing authentication in the near future
    String returnString = "";

    //check if authenticated
    String authorization = request.getHeader("Authorization");
    if (authorization == null || authorization.toUpperCase().startsWith("BASIC ") == false) 
        //no authenticated
        returnString =  "\"testAuth\", \"need authentication\""; 
        return Response.status(401).entity(returnString).build();
     else

        String credentials = authorization.substring("Basic".length()).trim();
        byte[] decoded = DatatypeConverter.parseBase64Binary(credentials);
        String decodedString = new String(decoded);
        String[] actualCredentials = decodedString.split(":");
        String ID = actualCredentials[0];
        String Password = actualCredentials[1];
        String Result = userAuthenticate(ID, Password);

        returnString =  "\"testAuth\", \"" + 
            " (" + Result + ") \"";
        return Response.status(200).entity(returnString).build();
       


【讨论】:

以上是关于java中的Restful Web应用程序(安全性)的主要内容,如果未能解决你的问题,请参考以下文章

RESTful Web 服务中的身份验证

使用 Apache Shiro 保护 RESTful Web 服务

仅由一个或两个客户端使用的 java 中保护 RESTful Web 服务的不同方法?

Java 中的 GAE Restful Web 服务

Restful Web API 安全性

使用 Spring Security 在 Web 应用程序和 RESTful 服务之间共享安全上下文