1

我已经使用“DocuSign APS.NET Core Web 应用程序”项目模板创建了一个作为服务部署在 Azure 中的功能,并且在通过我的本地计算机测试它时它工作正常。

但是,由于私钥错误,我在 Azure 中测试它时遇到了问题。我使用与本地主机测试中的字符串完全相同的字符串,并将其更改为具有不同的换行符转义字符。以下是我不断收到的错误消息:

-----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 的密钥保管库中,作为我的下一步。

任何帮助将不胜感激。先感谢您。

4

3 回答 3

1

如果我们想以 ASCII 编码格式将 ssh 密钥存储在 KeyVault 中,那么我们可以使用以下命令。

az keyvault secret set --vault-name <KEY_VAULT_NAME> --name <NAME_OF_THE_KEY> --file <PATH_OF_THE_SSH_KEY_FILE> --encoding ascii

于 2021-01-07T16:18:06.273 回答
0

我可能回答这个问题已经很晚了,但我们刚刚遇到了这个问题,发现解决方案是使用:

Regex.Unescape(/*Your RSA PRIVATE KEY*/);

我的假设是如果你的行尾使用 \r\n,那么这行代码应该可以修复它。

于 2021-11-13T00:03:28.190 回答
0

问题是 PEM 格式需要硬换行。但是您通过环境值提供私钥。

通过打印/检查rsaKey变量进行调试。

您需要进一步研究如何通过设置环境值的 Azure 功能提供包含硬换行符的环境值。

Azure Key Vault服务用于私钥而不是环境变量可能会更好(并且更安全)。

于 2020-02-21T11:59:57.217 回答