如何配置 Thorntail 2.5.0.Final 以使用来自 Keycloak 的 JWT 令牌授权用户?
Posted
技术标签:
【中文标题】如何配置 Thorntail 2.5.0.Final 以使用来自 Keycloak 的 JWT 令牌授权用户?【英文标题】:How to configure Thorntail 2.5.0.Final to authorize users with JWT token from Keycloak? 【发布时间】:2019-12-02 14:49:17 【问题描述】:我在通过从 Keycloak 收到的 Bearer TOKEN 授权用户时遇到问题。
任务是授权来自 Angular 应用程序的用户请求到我的后端 Thorntail 2.5.0.Final 微服务。我已经覆盖了前端部分,并且应用程序将 Authorization: Bearer TOKEN 附加到我的服务的每个请求中。
我已尝试遵循以下 2 个指南: https://rieckpil.de/howto-microprofile-jwt-authentication-with-keycloak-and-react/ https://kodnito.com/posts/microprofile-jwt-with-keycloak/
使用 thorntail microprofile 和 keycloak-micropfofile-jwt-fractions,但它们似乎都不起作用。
@Inject
@ConfigProperty(name = "message")
private String message;
@Inject
private JsonWebToken callerPrincipal;
@GET
@RolesAllowed("testrole")
@ApiOperation(value = "Pridobi uporabnike", notes = "Pridobi vse uporabnike iz baze.", response = Uporabnik.class)
public Response getUsers()
return Response.ok(callerPrincipal.getRawToken() + " is allowed to read message: " + message).build();
得到以下回复
null is allowed to read message: Very Secure 42!
我尝试的第二件事是添加 keycloak 分数并按照此示例https://github.com/thorntail/thorntail-examples/tree/master/security/keycloak通过标头发送令牌
我添加了资源/keycloak.json
"realm": "Intra",
"auth-server-url": "https://idm.ra.net/auth",
"ssl-required": "external",
"resource": "prenosOSBE",
"verify-token-audience": true,
"credentials":
"secret": "e9709793-9333-40a7-bb95-2026ad98b568"
,
"use-resource-role-mappings": true,
"confidential-port": 0
和示例中的 KeycloakSecurityContextFilter.java。 如果我尝试调用我的端点,我会得到 401 Unauthorized 或 403 Forbidden 如果我没有随请求发送令牌。
所以我想知道的是,如果我的任务是通过我的 Thorntail 微服务上的 Bearer 令牌授权用户,那么应该使用哪个分数?
microprofile-jwt、keycloak-microprofile-jwt 或 keycloak 以及它工作所需的最低配置是什么?
【问题讨论】:
【参考方案1】:keycloak
部分是根据https://www.keycloak.org/docs/4.8/securing_apps/index.html#jboss-eap-wildfly-adapter 用于 WildFly 的 Keycloak 适配器,它允许您使用 Java EE 中的常见安全机制(web.xml
等中的<security-constraint>
s)您可以在此处查看示例:@987654322 @
microprofile-jwt
允许您使用裸 MicroProfile JWT(即,@RolesAllowed
在 JAX-RS 资源等上)。您必须配置预期的颁发者、其公钥等,如 MP JWT 文档中所述。你可以在这里看到一个例子:https://github.com/rhoar-qe/thorntail-test-suite/tree/master/microprofile/microprofile-jwt-1.0
keycloak-microprofile-jwt
有点混合。它不公开 Keycloak 适配器,而是在内部使用它来验证 Keycloak 发出的令牌,并通过 MicroProfile JWT 公开令牌。你可以在这里看到一个例子:https://github.com/thorntail/thorntail/tree/master/testsuite/testsuite-keycloak-mpjwt
【讨论】:
以上是关于如何配置 Thorntail 2.5.0.Final 以使用来自 Keycloak 的 JWT 令牌授权用户?的主要内容,如果未能解决你的问题,请参考以下文章
Thorntail project-defaults.yml的技术参数
Docker(Spring Boot 或 Thorntail)和 Keycloak