我使用从UI获得的标准令牌通过CLI登录。然后我运行这个以获得一个包装标记:
vault write auth/approle/login role_id="e309ea24-994c-771e-939f-49e24a936ef2" secret_id="9597c7d0-3a88-c8f7-e43f-e8999600e38e"电话响了:
Key Value
--- -----
token s.5NuuJxEfdiJrfSiXXCU5MjZ6.dYgGw
token_accessor 3JFGpuaO45DuxD9nd6mUL6ic.dYgGw
token_duration 1h
token_renewable true
token_policies ["default" "transaction"]
identity_policies []
policies ["default" "transaction"]
token_meta_role_name transaction现在,我在一个展开调用中使用了令牌,如下所示:
IVaultClient vaultClientForUnwrapping = new VaultClient(
new VaultClientSettings(_settings.Address, new TokenAuthMethodInfo(vaultToken: wrappingToken))
);
string appRoleAuthSecretId
= vaultClientForUnwrapping.V1.System
.UnwrapWrappedResponseDataAsync<Dictionary<string, object>>(tokenId: null)
.Result.Data["secret_id"]
.ToString();当试图运行上面的解包装调用时,我得到了以下异常:
发生一个或多个错误。({“错误”:“包装令牌无效或不存在”)}
有人能帮忙吗?
发布于 2022-08-18 15:13:37
调用vault write auth/approle/login role_id="e309ea24-994c-771e-939f-49e24a936ef2" secret_id="9597c7d0-3a88-c8f7-e43f-e8999600e38e"不是返回包装令牌,而是返回原始令牌。
本质上,为了获得包装的令牌,您需要提供-wrap-ttl标志。
#!/usr/bin/env bash
vault server -dev -dev-root-token-id=root -dev-listen-address=127.0.0.1:8200 &
VAULT_SERVER_PID=$!
export VAULT_ADDR=http://127.0.0.1:8200
export VAULT_TOKEN=root
vault auth enable approle
vault write auth/approle/role/test-role policies=default
ROLE_ID=$(vault read -format=json auth/approle/role/test-role/role-id | jq -r .data.role_id)
SECRET_ID=$(vault write -f -format=json auth/approle/role/test-role/secret-id | jq -r .data.secret_id)
VAULT_WRAP_TOKEN=$(vault write -wrap-ttl=1h -format=json auth/approle/login role_id=${ROLE_ID} secret_id=${SECRET_ID} | jq -r .wrap_info.token)
VAULT_TOKEN=${VAULT_WRAP_TOKEN} vault write -f sys/wrapping/unwrap
kill -9 ${VAULT_SERVER_PID}这是一个示例脚本,它将提供一个实际的包装令牌,以及展开它的过程。您可以将-output-curl-string标志添加到上面的任何vault命令中,以查看API命令可能是什么。我使用jq编程将ID传递给下一个命令,但如果希望看到来自vault二进制文件的表格式响应,则可以省略-format=json和尾随| jq -r ...。
大多数需要Vault令牌的库之所以执行包装步骤,是因为可以确定除了令牌的最终用户之外,没有任何东西见过令牌。包装令牌只能使用一次,因此确保在使用之前没有其他任何东西对令牌进行解压。
但是,对于VaultSharp,漫不经心的一瞥建议您可以将角色ID和秘密ID直接传递给库,并让它根据需要生成自己的令牌。你可能希望研究一下这个问题。
https://stackoverflow.com/questions/73377049
复制相似问题