【问题标题】:Restful Java - Grant access to resourcesRestful Java - 授予对资源的访问权限
【发布时间】:2011-05-11 16:43:32
【问题描述】:

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

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

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

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

提前感谢您的回复

达尼洛

【问题讨论】:

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


【解决方案1】:

您应该使用 OAuth 1.0 或 2.0

【讨论】:

    【解决方案2】:

    您可能希望使用某种形式的传输层安全措施(例如 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
        }
      }
    }
    

    另请注意,如果您使用的是 Jersey 等流行框架之一,那么它内置了许多安全功能,可能会对您有所帮助。

    【讨论】:

    • 感谢您的回复,可以举个例子吗?感谢您的宝贵时间
    猜你喜欢
    • 1970-01-01
    • 2020-01-31
    • 2016-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多