java中身份验证_Serverside使用Bearer令牌以编程方式在Java中对Keycloak用户进行身份验证...

本文介绍了如何在Java REST endpoints中使用Keycloak和Bearer令牌进行用户身份验证。用户通过Keycloak登录获取JWT令牌,然后在HTTP请求中携带此令牌。服务器端需要验证接收到的令牌并获取Principal信息,以确定用户权限。目前,1-3步已实现,问题在于第4步,即如何在Java中验证Bearer令牌并获取Principal。尝试了security-constraint和BearerTokenRequestAuthenticator未果,最后通过ServiceSecurityInterceptor类拦截请求,但不清楚如何使用Keycloak公钥来验证令牌。
摘要由CSDN通过智能技术生成

我想使用Keycloak和Bearer令牌在我的Java REST endpoints 中验证用户 .

我想要实现的工作流程如下:

客户端使用用户名和密码登录Keycloak .

Keycloak返回一个Bearer令牌(JWT,如果我没错,我该怎么检查?) .

客户端使用 'Authorization' : 'Bearer ' 标头执行Http请求 .

REST endpoints (用Java编写)检查收到的令牌是否正确,并验证从Keycloak接收Principal的用户(如果我理解正确的话) .

经过身份验证后, endpoints 将检查用户是否有权访问该REST api并发回响应 .

1,2,3和5已经实现并正在工作,但我找不到实现方法4 .

我已经尝试过不同的方法:

我的Java endpoints 在WildFly 10.x上发布的EAR中运行,因此我在 web.xml 中使用 security-constraint 并通过 keycloak.json 配置了Keycloak .

这工作正常,但我需要在同一个Web上下文中保留一些REST endpoints 公开(即使没有'Authorization'标头也可访问),据我所知,我无法过滤安全约束中的某些请求 .

我尝试实现 BearerTokenRequestAuthenticator 但绝对没有成功,即使我不能认为我会因为我的身份验证请求而收到Principal .

现在我已经实现了一种过滤请求的方法,那些需要身份验证的方法被我实现的 ServiceSecurityInterceptor 类拦截 .

在该类中的某个时刻,我检查'Authorization'标头是否包含 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值