我正在开发一个具有不同资源的非常好的Web服务(应用程序数据库存储了urename和密码)。
另一方面,我有一个可以访问这些资源的客户端。要访问其中一些资源,必须注册客户端(存在于数据库中)。我使用GAE作为应用服务器和Jersey来创建Restful WS,所以我的问题是访问这些资源的最佳方式是什么?
我想在WS请求中发送用户名和密码(作为POST),然后检查数据库中是否存在该对,并在请求时回答。
您认为这种身份验证是否安全(我不认为我可以在GAE上使用https)?
先谢谢你的回复
Danilo的
答案 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
}
}
}
另请注意,如果您使用的是像泽西岛这样的流行框架之一,那么它内置了许多可以帮助您的安全功能。