我想使用Keycloak和Bearer令牌在我的Java REST端点中验证用户。
我想要实现的工作流程如下:
'Authorization' : 'Bearer <token>'
标头执行Http请求。1,2,3和5已经实施并正常工作,但我无法找到实现4的方法。
我已尝试过不同的方式:
我的Java端点在WildFly 10.x上发布的EAR中运行,因此我在security-constraint
中使用web.xml
并通过keycloak.json
配置了Keycloak。
这工作正常,但我需要在同一个Web上下文中公开一些REST端点(即使没有“授权”标题也可以访问),据我所知,我无法过滤安全性中的某些请求-constraint。
我尝试实施BearerTokenRequestAuthenticator
但绝对没有成功,即使我不能认为我会因身份验证请求而收到校长。
现在我已经实现了一种过滤请求的方法,而那些需要身份验证的方法被我实施的ServiceSecurityInterceptor
类拦截了。
在那个班级的某个时刻,我会检查“授权”是否在&#39;标头包含Basic
或Bearer
:
User loggedUser = null;
if (authorizationType.equals("Basic")) {
// ... decode Base64 username and password ...
loggedUser = userManagerBean.login(username, password);
} else if (authorizationType.equals("Bearer")) {
String token = ...; // Get token from header
// ... Here is where I need to send the token to Keycloak and receive a Principal with the username ...
loggedUser = userManagerBean.login(username):
}
我在某些地方读到我可能需要一个来自我的Keycloak领域的公钥但是一旦我拥有它,我该怎么办?
答案 0 :(得分:0)
几个月前,我们推出了Keycloak。诀窍是让Keycloak为您完成工作。我猜您正在使用OpenId connect?看看这些Java-Adapters。也许this one可以为您处理匹配的网址格式。
就我个人而言,我更喜欢将Spring Boot安全性与keycloak结合使用。 Keycloak Spring Boot Adapter与Java应用程序很好地集成。您只需要在Java应用程序和Keycloak服务器上进行一些配置即可。身份验证过程由KeyCloak和Keycloak适配器自动处理。使用Spring引导程序,您还可以为WildFly Server创建一个耳包。在Springs安全上下文( SecurityContextHolder.getContext()。getAuthentication()。getPrincipal())
中自动创建KeyCloakPrincipial