2

我正在开发一个将有不同资源(应用程序数据库存储urename和密码)的resful webservice。Restful Java - 授予对资源的访问权

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

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

你认为这种认证是安全的吗(我不认为我可以在GAE上使用https)?

提前感谢FO的responces

达尼洛

+1

作为一个经验法则,发送,可以多次使用了未加密的连接密码不被认为是安全的。 – biziclop 2011-05-10 16:15:19

+2

GAE支持HTTPS - http://googleappengine.blogspot.com/2008/10/announcing-https-support-for-appspotcom.html – 2011-05-10 21:44:04

回答

2

你应该使用OAuth 1.0或2.0

1

你可能想使用某种形式的传输层安全性,如SSL,以确保您的服务。

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

编辑:一个简单的例子

传输层安全
转到出售SSL证书,例如威瑞信的众多公司之一。购买证书。将其安装在您的Web服务器上。你的网络服务器将有如何安装它的文档。

使用HTTP授权
让您的Web服务的客户端使用基本授权(它们被传递明文,所以你一定要使用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 
    } 
    } 
} 

还要注意的是,如果你使用的是像新泽西流行的框架之一,那么它有很多的安全功能内置,可以帮助你。

+0

感谢您的回复,请给我举个例子吗? 感谢您的时间 – ddelizia 2011-05-10 19:37:12

相关问题