Keycloak - 如何请求具有自定义生命周期的令牌?

Keycloak - How to request a token with a custom lifespan?

上下文: 我们通常通过授权 Headers 传递令牌来使用 Keycloak 来保护我们的 API。但是,这些 API 也允许用户下载文件(例如:https://api.service.io/users.xlsx)。

为了使用这些 "download endpoints",我们的 Web 客户端应用程序通过查询字符串传递用户的令牌。 (例如 https://api.service.io/users.xlsx?accessToken=${bearerToken}))。

问题: 通过查询字符串传递令牌有几个安全漏洞(浏览器历史记录,...)。因此我们想传递一个非常 short-lived 的令牌(例如 生命周期为 15 秒)而不是正常的令牌(默认生命周期为 300 秒)。

问题: 我们如何从 Keycloak API(例如,/realms/#{realm_id}/protocol/openid-connect/token)请求不同的令牌:

阅读 Keycloak 的源代码后,似乎无法(版本 3.4.2.Final)在运行时请求特定的生命周期。

但是,我开发了一个 Keycloak 自定义 REST 端点来执行此操作。 https://github.com/looorent/keycloak-configurable-token-api

当此 JAR 文件部署在 Keycloak 中时,您可以在运行时请求给定的生命周期。例如: $ curl -X POST -d '{ "tokenLifespanInSeconds": 20}' -H "Content-Type: application/json" -H "Authorization: Bearer <user-access-token>" http://auth.service.io/auth/realms/a-realm/configurable-token