我在 Delinea Secret Server 中遇到 API 令牌问题。
我有一个可以访问大多数机密的域用户。 作为该用户,我可以使用凭据获取所有秘密。
所以在 powershell 中我可以这样做:
# Create creds object using username and password
$SScreds = New-Object System.Management.Automation.PSCredential($username,$SSsecurePwd)
$secretID = 138
$apiURL = “https://ssaddress/ss/winauthwebservices/api/v1/secrets/$SecretId”
$secret = Invoke-RestMethod $apiURL -credential $SScreds
现在……我想用令牌来完成,我想用Linux机器上的curl来完成。但让我们先用 Powershell 尝试一下。
$tokenRoute = https://ssaddress/ss/oauth2/token
$creds = @{
username = $username
password = $password
grant_type = "password"
}
$TokResponse = Invoke-RestMethod $tokenRoute -Method Post -Body $creds
$token = $TokResponse.access_token
$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$headers.Add("Authorization", "Bearer $token")
这会获取一个令牌并创建一个标头。标题看起来像这样:
Key Value
--- -----
Authorization Bearer AgJzT9yIzwYeO6GDUJEOEnQXk0yHb5X3pKIBQFVod1W30JHVCAjllIr0uU_PH6wXHkw…
接下来,我尝试找出秘密:
$apiURL = “https://ssaddress/ss/winauthwebservices/api/v1/secrets/$SecretId”
$secret = Invoke-RestMethod $apiURL -Headers $headers
它失败了:
"errorCode": "API_UserDoesNotHaveViewSecretPermission",
"message": "The user does not have view secret permission."
我在 Linux 中使用 Postman 尝试了同样的方法。
令牌是使用用户名和密码创建的。该帐户可以访问机密,那么为什么该令牌不起作用? 在 Secret Server 中,当我查看秘密共享时,我看到该帐户具有“查看”甚至“所有者”权限。
我是否在 Secret Server 中缺少允许使用令牌读取机密的设置?
这就是我在 linux 机器上的 bash 中所做的。
首先获取access_token
token=$(curl --request GET --location https://ssaddress/ss/oauth2/token \
--header "Content-Type: application/x-www-form-urlencoded" \
--data-urlencode "username=$user" \
--data-urlencode "password=$pass" \
--data-urlencode "grant_type=password")
access_token 如下所示:
{"access_token":"AgKPftIJXzzzzzzzzzdML9ixefDlto","token_type":"bearer","expires_in":1201}
然后修剪令牌以除去前导和尾随信息..
sstoken=`echo $token | cut -f 1 -d, | cut -f 2 -d : | sed 's/"//g'`
然后尝试获取秘密
curl --location --request GET https://ssaddress/ss/winauthwebservices/api/v1/secrets/128 --header "Authorization: Bearer $sstoken"
那失败了。
{
"errorCode": "API_UserDoesNotHaveViewSecretPermission",
"message": "The user does not have view secret permission."
}
解决了!
网址不正确:
$apiURL = “https://ssaddress/ss/winauthwebservices/api/v1/secrets/$SecretId”
应该是:
$apiURL = “https://ssaddress/ss/api/v1/secrets/$SecretId”