Restful Java - 授予对资源的访问权限

时间:2011-05-10 16:11:03

标签: java google-app-engine authentication rest restful-authentication

我正在开发一个具有不同资源的非常好的Web服务(应用程序数据库存储了urename和密码)。

另一方面,我有一个可以访问这些资源的客户端。要访问其中一些资源,必须注册客户端(存在于数据库中)。我使用GAE作为应用服务器和Jersey来创建Restful WS,所以我的问题是访问这些资源的最佳方式是什么?

我想在WS请求中发送用户名和密码(作为POST),然后检查数据库中是否存在该对,并在请求时回答。

您认为这种身份验证是否安全(我不认为我可以在GAE上使用https)?

先谢谢你的回复

Danilo的

2 个答案:

答案 0 :(得分:2)

您应该使用OAuth 1.0或2.0

答案 1 :(得分:1)

您可能希望使用某种形式的传输层安全性(如SSL)来保护您的服务。

此外,REST尝试使用HTTP功能,因此您可以在HTTP请求中放置Authorization标头。

编辑:一个简单的例子

传输层安全性
去许多销售SSL证书的公司之一,例如Verisign。买证书。将其安装在Web服务器上。您的Web服务器将提供有关如何安装它的文档。

使用HTTP授权
让您的Web服务的客户端使用BASIC授权(它们以纯文本形式传递,因此您必须使用SSL才能使其生效)。这涉及将BASE64编码的用户名和密码放在Authorisation header中。编写安全性Filter并配置您的Web应用程序,以通过筛选器将所有请求传递给RESTful服务。您的安全筛选器应从请求授权标头中提取用户名和密码并进行检查。如果凭据无效,则拒绝具有403状态代码的请求。如果凭据没问题,只需传播过滤器链。

public MySecurityFilter implements Filter {

  public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {

    //Get the Authorizatiuon header
    String auth = ((HttpServletRequest)request).getHeader("Authorization");

    //Extract the username and password

    if (checkCredentialsOnMyDatabase(credentials[0], credentials[1])) {
      chain.doFilter(request, response);
    } else {
      //Reject the request with status code 403
    }
  }
}

另请注意,如果您使用的是像泽西岛这样的流行框架之一,那么它内置了许多可以帮助您的安全功能。

相关问题