SFTP библиотека C++? [закрытый]

Похоже, что AzureServiceTokenProvider не поддерживает назначенные пользователем управляемые удостоверения, по крайней мере, на этом этапе. AzureServiceTokenProvder - это оболочка над локальной конечной точкой HTTP, которая предоставляет токены для приложения.

Я изучал это и, похоже, вы должны предоставить clientId конечного пользователя, которому назначен управляемый идентификатор, для получения токена. А у AzureServiceTokenProvider нет способа сделать это (по крайней мере, я мог бы это выяснить).

Назначенные пользователем управляемые идентификаторы добавляют возможность иметь несколько Назначенных пользователем управляемых идентификаторов для приложения. Таким образом, API для получения токена должен указывать, какой MSI вы хотите, назначенный системой MSI или один из назначенных пользователем MSI. Конечная точка HTTP делает это так, что она использует назначенный системой MSI, если вы не укажете clientId.

В любом случае вы можете напрямую подключиться к конечной точке токена и указать clientId назначенного пользователем MSI, например:

public async Task<String> GetToken(string resource, string clientId = null)
{
    var endpoint = System.Environment.GetEnvironmentVariable("MSI_ENDPOINT", EnvironmentVariableTarget.Process);
    var secret = System.Environment.GetEnvironmentVariable("MSI_SECRET", EnvironmentVariableTarget.Process);

    if (string.IsNullOrEmpty(endpoint))
    {
        throw new InvalidOperationException("MSI_ENDPOINT environment variable not set");
    }
    if (string.IsNullOrEmpty(secret))
    {
        throw new InvalidOperationException("MSI_SECRET environment variable not set");
    }

    Uri uri;
    if (clientId == null)
    {
        uri = new Uri($"{endpoint}?resource={resource}&api-version=2017-09-01");
    }
    else
    {
        uri = new Uri($"{endpoint}?resource={resource}&api-version=2017-09-01&clientid={clientId}");
    }

    // get token from MSI
    var tokenRequest = new HttpRequestMessage()
    {
        RequestUri = uri,
        Method = HttpMethod.Get
    };
    tokenRequest.Headers.Add("secret", secret);
    var httpClient = new HttpClient();

    var response = await httpClient.SendAsync(tokenRequest);

    var body = await response.Content.ReadAsStringAsync();
    var result = JObject.Parse(body);

    string token = result["access_token"].ToString();
    return token;

}
8
задан Rob 11 December 2008 в 17:50
поделиться

2 ответа

Выезд libcurl.

libcurl является свободной и простой в использовании клиентской библиотекой передачи URL, поддерживая FTP, FTPS, HTTP, HTTPS, SCP, SFTP, TFTP, TELNET, DICT, LDAP, LDAPS и ФАЙЛ. libcurl поддерживает сертификаты SSL, HTTP POST, ПОМЕЩЕННЫЙ HTTP, загрузка FTP, HTTP основанная на форме загрузка, прокси, cookie, user+password аутентификация (Основной, Обзор, NTLM, Согласуйте, Kerberos4), резюме передачи файлов, туннелирование прокси HTTP и больше!

libcurl является очень портативным, он создает и работает тождественно над многочисленными платформами, включая Солярис, NetBSD, FreeBSD, OpenBSD, Darwin, HPUX, IRIX, AIX, Tru64, Linux, UnixWare, HURD, Windows, Amiga, ОС/2, BeOs, Mac OS X, Ultrix, QNX, OpenVMS, RISC ОС, Novell NetWare, DOS и больше...

10
ответ дан 5 December 2019 в 10:45
поделиться

OpenSSH был бы хорошим вариантом. Это является межплатформенным и идет с лицензией BSD, таким образом, можно использовать его в коммерческом применении, не имея необходимость раскрывать исходный код.

3
ответ дан 5 December 2019 в 10:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: