首页 文章

如何使用AutoRest客户端传递客户端证书

提问于
浏览
1

我们使用AutoRest基于API Swagger文件生成客户端代码 .

我正在尝试将客户端证书传递给API . 但是注意到生成的客户端代码不接受WebRequestHandler .

生成的代码如下所示:

public MyTestApiV1(Uri baseUri, params DelegatingHandler[] handlers) : this(handlers)
        {
            if (baseUri == null)
            {
                throw new ArgumentNullException("baseUri");
            }
            this.BaseUri = baseUri;
        }

我觉得我在这里错过了一些东西 . 有没有人设法使用AutoRest发送客户端证书?

试过这个,但webRequestHandler总是为null:

var webRequestHandler = client.HttpMessageHandlers.First() as WebRequestHandler;
            if (webRequestHandler != null)
            {
                var secretRetrieved = keyVault.GetSecretAsync("my-cert");
                var pfxBytes = Convert.FromBase64String(secretRetrieved.Result);
                // or recreate the certificate directly
                var certificate = new X509Certificate2(pfxBytes);
                webRequestHandler.ClientCertificates.Add(certificate);
            }

1 回答

  • 1

    您可以使用另一个重载的构造函数:

    /// <summary>
    /// Initializes ServiceClient using base HttpClientHandler and list of handlers.
    /// </summary>
    /// <param name="rootHandler">Base HttpClientHandler.</param>
    /// <param name="handlers">List of handlers from top to bottom (outer handler is the first in the list)</param>
    protected ServiceClient(HttpClientHandler rootHandler, params DelegatingHandler[] handlers)
    

    ServiceClient是生成的客户端的基类 . 因此,代码可能如下所示:

    var secretRetrieved = keyVault.GetSecretAsync("my-cert");
    var pfxBytes = Convert.FromBase64String(secretRetrieved.Result);
    // or recreate the certificate directly
    var certificate = new X509Certificate2(pfxBytes);
    WebRequestHandler webRequestHandler = new WebRequestHandler();
    webRequestHandler.ClientCertificates.Add(certificate);
    var client = new MyTestApiV1(webRequestHandler);
    client.BaseUri = baseUri;
    

相关问题