保护Spring Rest服务

时间:2013-01-04 09:26:26

标签: android spring https spring-security

我正在尝试使用Spring实现RESTful Web服务。我已经设置了Spring Security来处理适用于REST服务的链接。我从Android应用程序调用此Web服务。我现在所做的是使用基本身份验证连接到它。我正在努力的是找到关于这是多么安全的正确信息。我想我至少应该通过SSL或其他东西进行这些调用?

我在调用REST客户端的Android客户端上的代码

  public MyClass callRest() {
    final String url = "http://10.0.2.2:8080/myservice/rest/getSomething";

    HttpAuthentication authHeader = new HttpBasicAuthentication(username,
            password);
    HttpHeaders requestHeaders = new HttpHeaders();
    requestHeaders.setAuthorization(authHeader);
    requestHeaders.setAccept(Collections
            .singletonList(MediaType.APPLICATION_JSON));

    RestTemplate restTemplate = new RestTemplate();
    restTemplate.getMessageConverters().add(
            new MappingJacksonHttpMessageConverter());
    try {
        ResponseEntity<MyClass> response = restTemplate.exchange(url,
                HttpMethod.GET, new HttpEntity<Object>(requestHeaders),
                MyClass.class);
        return response.getBody();
    } catch (HttpClientErrorException e) {
        return new MyClass();
    }

}

所以我现在在Spring Security配置中添加了:

<http auto-config='true'>
    <intercept-url pattern="/rest/**" access="ROLE_USER"
        requires-channel="https" />
</http>

我无法弄清楚从那里去哪里,因为现在连接因为https而不再起作用了。我似乎无法找到如何使用Resttemplate来解决这个问题的正确例子。

任何帮助?

1 个答案:

答案 0 :(得分:1)

HTTP基本身份验证在通过HTTPS使用时相当安全,因为用户和密码字段是通过加密连接发送的,因此它们更不容易受到中间人攻击。这里有一些有趣的观点:Securing an API: SSL & HTTP Basic Authentication vs Signature

在我看来,如果您正在创建一个可以访问用户敏感数据的API(即银行帐户详细信息,信用卡号,电子邮件地址和密码),那么您可能需要更安全的方法,因为HTTP基本身份验证可以成功实现强制攻击,因为它始终可用(除非你构建了最大重试等威慑力量)。如果你的API用于游戏或基本商业数据,那么黑客花在上面的时间应该不那么吸引人了。

您的服务器是否支持HTTPS - 通常您需要为HTTPS证书支付额外费用,或者您必须使用共享一次的共享HTTPS域,即https//your-site.your-hosting-provider.com/。你可能需要检查一下。

更新1 :您的问题似乎与您的服务器有关,而与您的程序无关。查看this blog post以获取有关如何在Tomcat服务器上设置HTTPS的信息。您需要在使用Spring应用程序中的HTTPS之前执行此操作 - 查看代码,除了您的服务器之外似乎没有问题。

另请尝试this

更新2 一旦您有权访问,您就需要信任Android设备上的证书(如果您正在制作桌面/ Web应用程序,则需要信任Java安装)。它需要被信任,因为您自己创建它而不是CA权限。请参阅此答案:Trusting all certificates using HttpClient over HTTPS(不是关于信任所有证书的部分 - 这可能很危险)。