----- END RSA PRIVATE KEY не найдена ошибка при запуске faas в Azure - PullRequest
0 голосов
/ 21 февраля 2020

Я создал функцию как службу для развертывания в Azure с использованием шаблона проекта «DocuSign APS. NET Базовое веб-приложение», и он отлично работает при тестировании на моей локальной машине.

Однако при тестировании в Azure возникают проблемы из-за ошибки закрытого ключа. Я использую в точности ту же строку, что и в тестировании локального хоста, а также изменяю ее, чтобы иметь различные escape-символы для разрывов строк. Далее я получаю сообщение об ошибке:

----- END RSA PRIVATE KEY не найден

Строка, которая работает на локальном хосте, но не работает в azure есть следующая строка:

-----BEGIN RSA PRIVATE KEY-----\r\n********\r\n-----END RSA PRIVATE KEY-----

Я также пробовал следующие строки для azure, но они не работают:

-----BEGIN RSA PRIVATE KEY-----
********
-----END RSA PRIVATE KEY-----

-----BEGIN RSA PRIVATE KEY-----
********
-----END RSA PRIVATE KEY-----

Я также ввел один с переводом строки в конфигурацию настроек приложения:

-----BEGIN RSA PRIVATE KEY-----
*********
-----END RSA PRIVATE KEY-----

Мой код использует JWTAuth.cs, предоставленный из шаблона, и выглядит следующим образом:

public static class JWTAuth
{
    /// <summary>
    /// Uses Json Web Token (JWT) Authentication Method to obtain the necessary information needed to make API calls.
    /// </summary>
    /// <returns>A tuple containing the accessToken, accountId and baseUri</returns>
    public static (string, string, string) AuthenticateWithJWT()
    {
        var apiClient = new ApiClient();
        // Get environment variables
        string ik = System.Environment.GetEnvironmentVariable("IntegrationKey", EnvironmentVariableTarget.Process);
        string userId = System.Environment.GetEnvironmentVariable("userId", EnvironmentVariableTarget.Process);  
        string authServer = System.Environment.GetEnvironmentVariable("AuthServer", EnvironmentVariableTarget.Process); 
        string rsaKey = System.Environment.GetEnvironmentVariable("RSAKey", EnvironmentVariableTarget.Process); 

        OAuth.OAuthToken authToken = apiClient.RequestJWTUserToken(ik,
                        userId,
                        authServer,
                        Encoding.UTF8.GetBytes(rsaKey),
                        1);

        //string path = "Resources/PrivateKey.pem";
        //StreamReader pk = File.OpenText(path);

        string accessToken = authToken.access_token;
        apiClient.SetOAuthBasePath(authServer);
        OAuth.UserInfo userInfo = apiClient.GetUserInfo(authToken.access_token);
        Account acct = null;

        var accounts = userInfo.Accounts;
        {
            acct = accounts.FirstOrDefault(a => a.IsDefault == "true");
        }
        string accountId = acct.AccountId;
        string baseUri = acct.BaseUri + "/restapi";
        return (accessToken, accountId, baseUri);
    }
}

Если я могу решить эту проблему Следующим шагом я хочу сохранить настройки приложения в хранилище ключей Azure.

Любая помощь будет принята с благодарностью. Заранее спасибо.

1 Ответ

0 голосов
/ 21 февраля 2020

Проблема в том, что формат PEM требует жестких новых строк. Но вы предоставляете закрытый ключ через значение среды.

Отладка путем печати / проверки переменной rsaKey.

Вам необходимо дополнительно изучить вопрос о том, как предоставить значение среды. который включает в себя жесткие переводы строк с помощью функции Azure, которая устанавливает значение среды.

Возможно, было бы лучше (и более безопасно) использовать службу Azure Key Vault для закрытый ключ вместо переменной окружения.

...