任何人都可以帮助我吗?
我使用基于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以使其成为可能。
有什么想法吗?
提前致谢
答案 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。
也许有更好的解决方案(客户端凭据),但我需要登录用户来重新使用我的端点。