在具有OAUTH2基本安全性的monolithyc Jhipster APP中公开api

时间:2018-06-06 07:35:54

标签: jhipster

任何人都可以帮助我吗?

我使用基于Keycloak的安全性构建了一个Jhipster monolithyc应用程序。这个keycloak访问我的法人ldap和所有作品完美。当某人想要一个页面时,它会重定向到http://localhost:8080/login并重定向到keycloak进行唱歌,它会返回http://localhost:8080/login并获取登录用户的令牌,因此用户可以访问他的角色 - 用户权限。

现在,我们希望将api暴露给第三方公司,以便重用我的应用程序的业务逻辑。 (我们可以使用Web服务,但我们希望公开我们的restful api)。他们有自己的应用程序(桌面,网络等),我们希望公开我们的API,以便他们可以使用相同的安全策略与我们沟通。他们在我们的ldap中有用户。任何人都可以告诉我哪个是用用户角色权限公开它的最佳方式。

一种方法是他们可以向我们发送他们的登录信息(用户,密码)。我们知道这不是最好的方式,但我们不知道如何以其他方式做到这一点。有没有人知道如何根据此用户登录使用keycloak登录。我们启用了直接连接,我们可以使用密码流获取Keycloak访问令牌。但是,如果我们这样做,我们如何在OAuth2Authentication对象中转换此令牌,以便我们可以生成JSESSIONID来调用api?

我们禁用了csrf以使其成为可能。

有什么想法吗?

提前致谢

1 个答案:

答案 0 :(得分:0)

经过几天的研究,我找到了解决方案。

以下是代码:

@Configuration

@EnableResourceServer

公共类ResourceServerConfiguration扩展了ResourceServerConfigurerAdapter {

@Bean("resourceServerRequestMatcher")
public RequestMatcher resources() {
    return new AntPathRequestMatcher("/external-access/**");
}

@Override
public void configure(final HttpSecurity http) throws Exception {
    http
        .requestMatcher(resources()).authorizeRequests()
        .anyRequest().authenticated();

}

}

这样我就有了基于Keycloak的WebSecurity和密码流基础资源。对于这个解决方案,我要公开的api都有/ api / external-api映射,首先用于web导航,另一个用于直接访问。要通过第二种方式访问​​,您必须先调用keycloak获取令牌,然后使用该令牌访问/ external-api。

也许有更好的解决方案(客户端凭据),但我需要登录用户来重新使用我的端点。