上下文:我们使用Keycloak通过通过授权标头传递令牌来保护我们的API。但是,这些API还允许用户下载文件(例如:https://api.service.io/users.xlsx
)。
要使用这些"下载端点",我们的网络客户端应用程序会通过用户'令牌通过查询字符串。 (例如 https://api.service.io/users.xlsx?accessToken=${bearerToken})
)。
问题:通过查询字符串传递令牌有几个安全漏洞(浏览器历史记录,...)。因此,我们希望传递一个非常短暂的令牌(例如生命周期为15秒)而不是正常的令牌(默认情况下为300秒的生命周期)。
问题:我们如何通过以下方式从Keycloak API(例如,/realms/#{realm_id}/protocol/openid-connect/token
)请求其他令牌:
答案 0 :(得分:2)
在阅读了Keycloak的源代码后,似乎无法在运行时询问特定的生命周期(版本3.4.2.Final
)。
但是,我开发了一个Keycloak Custom REST端点来做到这一点。 https://github.com/looorent/keycloak-configurable-token-api
当在Keycloak中部署此JAR文件时,您可以在运行时请求给定的生命周期。例如:
$ 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