oauth2.0 使用shell命令从curl请求中提取令牌

xqk2d5yq  于 2023-10-15  发布在  Shell
关注(0)|答案(1)|浏览(135)

我已经开始学习bash脚本,我一直在努力理解一些东西。
我有一个curl命令可以输出一个token,我需要在下面的命令中使用它:
curl -k 'https://server:port/session' -X POST -H 'Content-Type: application/json' -d '{"username":"admin","password":"password"}'
然后它在这里输出一个令牌:
{“token”:“ac07098ad59ca6f3fccea0e2a2f6cb080df55c9a52fc9d65”}
然后我需要在后续命令中使用它
curl https://server:port/ -k -X POST -H 'Content-Type: application/json' -H 'X-Cookie:token=token' -d '
我想我可以将令牌输出到一个文件,然后让sed命令将令牌写入文件,然后新命令使用一个变量,其中token=$token

iqjalb3h

iqjalb3h1#

jq用于在终端中提取令牌。
提取令牌

TOKEN=$(curl --silent --location --request POST https://server:port/session \
--header "Content-Type: application/json" \
--data-raw '{
    "username": "admin",
    "password": "password"
}' | jq -r '.token')

使用令牌

curl --silent --location --request POST https://server:port/some \
--header "Content-Type: application/json" \
--header 'X-Cookie: token '$TOKEN

我用flask做了一个模拟演示代码,它将返回一个带有硬代码的令牌。并返回X-Cookie表单头。

from flask import Flask, request
app = Flask(__name__)

@app.route("/session", methods=["POST"])
def session():
    content_type = request.headers.get('Content-Type')
    if (content_type == 'application/json'):
        json = {
            "token": "ac07098ad59ca6f3fccea0e2a2f6cb080df55c9a52fc9d65"
        }
        return json, 201
    else:
        return 'Content-Type not supported!'

@app.route("/test", methods=["POST"])
def test():
    content_type = request.headers.get('Content-Type')
    if (content_type == 'application/json'):
        json = {
            "X-Cookie": request.headers.get('X-Cookie')
        }
        return json, 201
    else:
        return 'Content-Type not supported!'

if __name__ == "__main__":
    app.run(debug=True)

获取令牌

TOKEN=$(curl --silent --location --request POST http://localhost:5000/session \
--header "Content-Type: application/json" \
--data-raw '{
    "username": "admin",
    "password": "password"
}' | jq -r '.token')

显示令牌

echo $TOKEN

使用令牌

curl --silent --location --request POST http://localhost:5000/test \
--header "Content-Type: application/json" \
--header 'X-Cookie: token '$TOKEN

结果

相关问题