gpt4 book ai didi

java - 服务器端使用承载 token 在 Java 中以编程方式验证 Keycloak 用户

转载 作者:搜寻专家 更新时间:2023-10-30 23:01:38 26 4
gpt4 key购买 nike

我想使用 Keycloak 和 Bearer token 在我的 Java REST 端点中对用户进行身份验证。

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

  1. 客户端使用用户名和密码登录到 Keycloak。
  2. Keycloak 返回一个 Bearer token (一个 JWT token ,如果我没记错的话,我该如何检查?)。
  3. 客户端使用 'Authorization' : 'Bearer <token>' 执行 Http 请求标题。
  4. REST 端点(用 Java 编写)检查接收到的 token 是否正确,并对从 Keycloak 接收委托(delegate)人的用户进行身份验证(如果我理解正确的话)。
  5. 一旦通过身份验证,端点将检查用户是否有权访问该 REST api 并发回响应。

1、2、3 和 5 已经实现并正在运行,但我找不到实现 4 的方法。

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

  • 我的 Java 端点在 WildFly 10.x 上发布的 EAR 中运行,因此我使用了 security-constraint在我的 web.xml并通过 keycloak.json 配置了 Keycloak .
    这工作正常,但我需要在相同的 Web 上下文中将一些 REST 端点公开(即使没有“授权” header 也可以访问),据我所知,没有办法只过滤我的安全约束中的一些请求。

  • 我尝试实现 BearerTokenRequestAuthenticator绝对没有成功,即使我可以,我也不认为我会收到我的身份验证请求的委托(delegate)人。

现在我已经实现了一种过滤请求的方法,需要身份验证的请求会被 ServiceSecurityInterceptor 拦截我实现的类(class)。

在该类(class)的某个时刻,我检查“授权” header 是否包含 BasicBearer :

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):

}

我在某些地方读到我可能需要来 self 的 Keycloak 领域的公钥,但是一旦我有了它,我应该做什么?

最佳答案

几个月前,我们推出了 Keycloak。诀窍是让 Keycloak 为您完成工作。我猜你正在使用 OpenId 连接?看看这些 Java-Adapters .也许this one可以为您处理 url 模式匹配。

就我自己而言,我更喜欢将 Spring boot security 与 keycloak 结合使用。 Keycloak Spring Boot Adapter与 Java 应用程序很好地集成。您只需在 Java 应用程序和 Keycloak 服务器上进行一些配置。身份验证过程由 KeyCloak 和 Keycloak 适配器自动处理。使用 Spring Boot,您还可以为您的 WildFly 服务器创建一个 ear 包。 KeyCloakPrincipial 是在 Springs 安全上下文中自动创建的 (SecurityContextHolder.getContext().getAuthentication().getPrincipal())

关于java - 服务器端使用承载 token 在 Java 中以编程方式验证 Keycloak 用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49979012/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com