【问题标题】:Spring Security in Rest APIRest API 中的 Spring 安全性
【发布时间】:2017-12-05 18:45:31
【问题描述】:

我无法为我们的 REST API 选择安全类型。首先我描述一个问题。有一个应用程序将使用此 REST API。此应用程序具有前端和后端。它使用库 spring-security-oauth2 和 spring-boot-starter-security 实现 spring 安全性。它使用 JWT 并将在 AWS 上。它将使用来自 AWS 的令牌。此应用程序将使用从另一个数据库中提取数据的 rest 服务。

我想在 REST API spring security oauth2 和 JWT 中使用,但是这个 REST API 将部署在带有 JAVA 1.5 的旧 JBOSS 4.2 上(不幸的是,它不能用 java 1.5 更改,这是我得到的限制) .我检查的 Spring security oauth2 使用 1.6 及更高版本。我的问题是,有人可以建议我在 REST API 中使用什么来实现安全目的吗?

将来这个 REST API 可以被不同的应用程序使用。我想使用比基本身份验证更安全的东西。我搜索了解决方案,但没有发现任何有意义和有用的东西。想请教一下使用spring security的人的意见。

编辑
我决定将基本身份验证与内存用户和密码保持一起使用。我在实现中添加了两个类:

@Configuration
@EnableWebSecurity
public class SecurityConfiration extends WebSecurityConfigurerAdapter {

    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        auth
                .inMemoryAuthentication()
                .withUser("user").password("password").roles("USER");
    }

    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
                .anyRequest().authenticated()
                .and()
                .httpBasic();
    }
}

二等:

public class SecurityApplicationInitializer extends AbstractSecurityWebApplicationInitializer {

    public SecurityApplicationInitializer() {
        super(SecurityConfiration.class);
    }
}

基本上就是这样。它不起作用。调用 rest api 工作正常,结果正在显示。 401 不工作。我是不是忘记了什么?此外,我不想使用重定向登录或显示带有凭据输入的窗口。我想发送带有错误或消息的正文或标题信息。我可以重写一些东西来做到这一点吗?

环境:部署在 Jboss 4.2 (Java 1.5) 和 Spring Security 3.2.10 上。

【问题讨论】:

  • @holmis83 仅使用基本身份验证要求用户在每次请求时以纯文本形式发送密码。出于显而易见的原因,这是不可取的,这也是 API 开发人员经常使用其他授权/身份验证措施的原因。对于不使用 SSL 进行通信的 API 尤其如此。
  • @jjones 使用 https (SSL/TLS) 时,密码不会以纯文本形式发送,这几乎是所有安全 Web 应用程序的要求。
  • @holmis83 但是,并非所有需要身份验证/授权的 API 都需要加密,并且在这些情况下通常会发现不必要的开销。此外,我更喜欢一次性的、可撤销的公钥/私钥的灵活性,而不是只为用户提供用户名和密码。在公钥/私钥的情况下,我还可以非常轻松地实现消息签名策略。
  • 调用rest api的客户端没有用户名和密码。如果我使用基本身份验证,则必须在 api 属性或类似的东西中硬编码用户和密码。我错了吗? rest api 的数据库也没有用户表,其中有用户和密码。有使用sso登录。

标签: rest spring-security java-5


【解决方案1】:

这可能不是您正在寻找的答案,但这里是建议:

不要局限于“我应该使用什么样的框架”。最后剩下的是关于 http 并且完全不知道 spring(-security) 或 java,这只是传递带有包含一些授权令牌的标头的请求。

在正常情况下,不鼓励自定义 oauth(2) 实现,但在某些限制下,如 Java 1.5 可能是唯一的选择。或者根据情况(非关键资源、内部 vpn),一些简单的基于令牌的授权可能就足够了。

【讨论】:

    猜你喜欢
    • 2016-01-24
    • 2014-04-27
    • 2014-02-24
    • 2015-04-15
    • 2015-05-22
    • 2015-09-08
    • 2016-03-29
    • 2014-04-23
    • 2012-06-16
    相关资源
    最近更新 更多