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
上下文: 我们通常通过授权 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