在 curl PUT 中将私钥作为 header 传递,返回非法字符错误

Pass private key as header in curl PUT returning error for illegal character

我有一个 .pem 文件,其中包含我需要作为授权传递的私钥 header。

我试过只使用命令 $(cat $REPO_ROOT/pulsar/tls/broker/broker.key.pem) 但我得到的响应是:<h1>Bad Message 400</h1><pre>reason: Illegal character LF=\n</pre>0

我可以不将 .pem 的内容直接传递到 header 吗?

CLUSTER=standalone
TENANT=sandbox
NAMESPACE=integration_test
AUTHORIZATION=$(cat $REPO_ROOT/pulsar/tls/broker/broker.key.pem)


# Create tenant
curl -L -X PUT "http://localhost:$HOST_PULSAR_PORT/admin/v2/tenants/$TENANT" \
    --header "Authorization: Bearer $AUTHORIZATION" \
    --header 'Content-Type: application/json' \
    --data-raw "{\"allowedClusters\": [\"$CLUSTER\"]}"

私钥永远不会在网络请求中作为 header 发送。也许是 public 键。

当您尝试发送时:

Authorization: Bearer $AUTHORIZATION

我怀疑你应该发送一个签名的 JWT 令牌?

此外,您尝试发送一个 pem 文件,如 application/json,两者都不匹配。 pem 文件通常是 multi-line 数据结构,需要对其进行编码才能在 header.

中发送

私钥需要小心保管。您应该永远 必须在 HTTP header.

中传递它

对于 Pulsar,您应该使用私钥生成 JWT 令牌以在 HTTP header 中使用。您可以使用以下命令:

bin/pulsar tokens create --private-key file:///path/to/my-private.key \
            --subject test-user

令牌的主题应与 Pulsar 租户或命名空间上的授权角色相匹配。有关详细信息,请参阅 https://pulsar.apache.org/docs/en/security-token-admin/