首页 > 解决方案 > 远程上传秘密到 Thycotic Secret Server 的 API

问题描述

我是 PowerShell、Thycotic Secret Server 和编写 API 的新手。我的任务是编写一个 API 来远程访问 Thycotic Secret Server 并将一个秘密与附件一起上传。不幸的是,我还没有离开起跑线。我在这里关注代码:

https://thycotic.force.com/support/s/article/REST-API-PowerShell-Scripts-Getting-Started

我抄下了:3 – 搜索秘密 4 – 创建秘密和

从这里获取令牌: https ://thycotic.force.com/support/s/article/Secret-Server-Trial-Using-the-API

并为每个人创建了功能。我所做的唯一更改是更改 myurl、myusername 和 mypassword。

这是我的 PowerShell 脚本:

$myUrl = "mysecretserver/Login.aspx?ReturnUrl=%2f"
$application = "https://mysecretserver/Login.aspx?ReturnUrl=%2fsecretserver"

# Ask for user name
$userName = Read-Host -Prompt "Please enter user name"
$userPassword = Read-Host -AsSecureString "Password"

[System.Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}

Get-Token
Search-Secrets $userName,$userPassword
Create-Secret $userName,$userPassword 

当我运行 Get-Token 时(未对下载的代码进行任何更改)

function Get-Token
{
    [CmdletBinding()]
    Param(
        [Switch] $UseTwoFactor
    )

    $creds = @{
        username = $userName
        password = $userPassword
        grant_type = "password"
    };

    $headers = $null
    If ($UseTwoFactor) {
        $headers = @{
            "OTP" = (Read-Host -Prompt "Enter your OTP for 2FA (displayed in your 2FA app): ")
        }
    }

    try
    {
        $response = Invoke-RestMethod "$application/oauth2/token" -Method Post -Body $creds -Headers $headers;
        $token = $response.access_token;
        return $token;
    }
    catch
    {
        $result = $_.Exception.Response.GetResponseStream();
        $reader = New-Object System.IO.StreamReader($result);
        $reader.BaseStream.Position = 0;
        $reader.DiscardBufferedData();
        $responseBody = $reader.ReadToEnd() | ConvertFrom-Json
        Write-Host "ERROR: $($responseBody.error)"
        return;
    }
}

它似乎运行正常,但是当我显示 $token 时,它是空的。我不是 100% 确定这是在做什么,并且查看了很多示例,但似乎缺少读取令牌和使用它访问秘密服务器的基本步骤。任何帮助将不胜感激。

标签: restpowershell

解决方案


将您的 Secret Server URL 替换为服务器的 FQDN,而不是您在浏览器中获得的 Web URL。您需要确保 Secret Server 地址是正确的,否则它不会访问 API(并且可能会优雅地失败,这就是为什么您不会从Get-Token函数中看到任何错误的原因)。

例如,而不是:

$application = "https://mysecretserver/Login.aspx?ReturnUrl=%2fsecretserver"

它可能是这样的:

$application = "https://mysecretserver.mydomain.com"

推荐阅读