我最近使用Keycloak Servlet适配器配置了SSO。
问题在于我们具有服务到服务的通信,该通信与BASIC身份验证配合。
以前,我们使用JAAS身份验证,因此S2S通信是无状态的(没有会话关联)。
使用SSO / Keycloak不再是这种情况。此外,每个REST请求都会创建一个新的Keycloak会话。
我试图找到没有Keycloak定制和编码的配置或替代解决方案,但是我找不到。
P.S。由于向后兼容,我无法更改REST客户端以切换到BEARER或其他身份验证方法。
有人有更好的主意吗?
答案 0 :(得分:0)
我了解到您不能从基本更改为承载者。但是,您可以完全从其他服务中关闭基本身份验证吗?
我说这是因为这样做之后,您可能可以将身份验证逻辑移至过滤器。
您可以创建一个Filter,该请求将在所有请求到达我的休息服务之前将其拦截。该过滤器处理身份验证,并基于成功进行休息服务,否则返回401。 示例代码:
public class RequestInterceptor implements Filter
{
if( (performAuth()) )
chain.doFilter(request, response);
else
// set status to HttpServletResponse.SC_SERVICE_UNAVAILABLE
}
// But you will have to find a way to exclude this class from authentication chain.
尝试按照这些思路思考,您可能会得到一些指导。