首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用JDBCRealm保护REST REST服务?

使用JDBCRealm保护REST REST服务?
EN

Stack Overflow用户
提问于 2013-04-09 16:51:59
回答 2查看 1K关注 0票数 0

我在这里读到了非常好的答案--如何确保休息服务的安全,但它们都只是纯理论,没有多大帮助。如何在使用REST时实现JDBCRealm表单身份验证?

登录表格

代码语言:javascript
复制
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Login Form</title>
</head>

<body>
<form method="post" action="j_security_check">
<p>You need to log in to access protected information.</p>
<table>
   <tr>
      <td>User name:</td>
      <td><input type="text" name="j_username" /></td>
   </tr>
   <tr>
      <td>Password:</td>
      <td><input type="password" name="j_password" /></td>
   </tr>
</table>
<p><input type="submit" value="Login" /></p>
</form>
</body>
</html>

web.xml

代码语言:javascript
复制
<security-constraint>
    <web-resource-collection>
        <web-resource-name>How to protect REST</web-resource-name>
        <url-pattern>/protected/*</url-pattern>----> What is that in case of rest?
        <http-method>GET</http-method>
        <http-method>POST</http-method>
        <http-method>HEAD</http-method>
        <http-method>PUT</http-method>
        <http-method>OPTIONS</http-method>
        <http-method>TRACE</http-method>
        <http-method>DELETE</http-method>
    </web-resource-collection>
    <auth-constraint>
        <role-name>admin</role-name>
        <role-name>customer</role-name>
        <role-name>user</role-name>
    </auth-constraint>
</security-constraint>
<login-config>
    <auth-method>FORM</auth-method>
    <realm-name>jdbcRealm</realm-name>

</login-config>
<security-role>
    <role-name>admin</role-name>
</security-role>
<security-role>
    <role-name>user</role-name>
</security-role>
<security-role>
    <description/>
    <role-name>customer</role-name>
</security-role>

问题:

1)我在玻璃鱼中创建了JDBCRealm,它正在工作。我用另一个jsf-app测试了它。例如,在clien服务中,什么是:<url-pattern>/protected/*</url-pattern>,在正常情况下,它指的是受保护的jsp/jsf/xhtml等页面所在的“文件夹”,但现在在哪里?

2)会话如何?我认为在无状态上下文中使用会话是不可能的。

( 3)在REST中,是否可以使用基于表单的身份验证?

4)任何指向教程的链接,其中有人比我更聪明地解释了如何保护客户机-服务器rest应用程序。

EN

回答 2

Stack Overflow用户

发布于 2013-04-09 18:23:35

不能使用REST格式,因为每个请求本身都必须是完整的,并且是无状态的。表单与重定向不是。您需要使用标准的基于HTTP报头的机制,如Basic、Digest等。

票数 1
EN

Stack Overflow用户

发布于 2013-04-09 21:18:13

1)我在玻璃鱼中创建了JDBCRealm,它正在工作。我用另一个jsf-app测试了它。例如,在clien-REST服务中,什么是:/受保护/*在正常情况下它指的是受保护的jsp/jsf/xhtml等页面所在的“文件夹”,但现在在哪里呢?

您可以选择保护整个REST服务子域或其中的一部分。假设您将根配置为/rest,这就是您将在url模式中放置的内容。

2)会话如何?我认为在无状态上下文中使用会话是不可能的。

取决于您的REST实现。对于JAX(泽西岛),答案是绝对肯定的,您可以使用HTTP会话。通过@Context注释将其注入资源类:

代码语言:javascript
复制
@Path("/echo")
public class EchoServiceImpl {
    @Context
    private HttpSession session;
}

在确认您可以使用会话之后,我强烈建议您不要使用它,因为RESTful调用应该是无状态的。

( 3)在REST中,是否可以使用基于表单的身份验证?

在REST中使用基于表单的身份验证是没有意义的。您正在设计的服务将由其他计算机系统使用,而不是由人类使用。在这个过程中不应该涉及交互式UI。

4)任何指向教程的链接,其中有人比我更聪明地解释了如何保护客户机-服务器rest应用程序。

这是一个困难的问题,有很多指南,但其中很多是非常特定于在REST实现中使用的特定技术栈的。首先,我建议您将当前的配置从表单更改为BASIC,并考虑使用SSL保护端点。请记住,在使用基本身份验证时,需要在授权头中包含用户凭据:

代码语言:javascript
复制
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==

您可以阅读如何计算头这里

一旦熟悉了Basic/Digest身份验证,您就可以开始研究更高级的安全选项,比如OAuth。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15907853

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档