You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何单条命令完成Keycloak token获取并传入后续curl请求header?

解决方案

问题根因

你原有写法不生效的原因是:curl的@-语法仅支持读取请求体内容,不支持动态填充请求头的取值。

方案1:命令替换(最简洁的单命令实现)

直接将获取token的逻辑用$()包裹,作为字符串嵌入到第二个curl的请求头配置中,代码如下:

curl \
    -X GET \
    -H "Accept: application/json" \
    -H "Authorization: Bearer $(curl -X POST \
        -d 'client_id=app' \
        -d 'username=username' \
        -d 'password=password' \
        -d 'grant_type=password' \
        -d "client_secret=$APP_SECRET" \
        'http://localhost:9000/auth/realms/realm/protocol/openid-connect/token' \
    | jq -r '.access_token')" \
    -u "username:password" \
    "http://localhost:8080/app/api/"

方案2:xargs管道传递(和原写法逻辑最接近)

如果不想嵌套curl命令,可以用xargs接收管道输出的token,替换到指定位置,代码如下:

curl \
    -X POST \
    -d 'client_id=app' \
    -d 'username=username' \
    -d 'password=password' \
    -d 'grant_type=password' \
    -d "client_secret=$APP_SECRET" \
    'http://localhost:9000/auth/realms/realm/protocol/openid-connect/token' \
| jq -r '.access_token' \
| xargs -I % curl \
    -X GET \
    -H "Accept: application/json" \
    -H "Authorization: Bearer %" \
    -u "username:password" \
    "http://localhost:8080/app/api/"

其中xargs -I %的作用是将标准输入读到的token值,替换后续命令中所有%的位置。

调试小提示

如果执行异常,可以先单独运行获取token的命令curl [参数] | jq -r '.access_token',确认输出的是纯token字符串、没有多余的日志或换行符。

内容的提问来源于stack exchange,提问作者sesodesa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 06:06:00