From a73ae505a223792b68002413c7780f51a9de7a09 Mon Sep 17 00:00:00 2001 From: Brennan Date: Mon, 31 Aug 2020 13:53:55 -0700 Subject: [PATCH] System.Security.Cryptography fails on WASM (#25285) --- .../src/HttpConnectionFactory.cs | 11 +++++++++-- .../src/HttpConnectionOptions.cs | 9 ++++++++- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/src/SignalR/clients/csharp/Http.Connections.Client/src/HttpConnectionFactory.cs b/src/SignalR/clients/csharp/Http.Connections.Client/src/HttpConnectionFactory.cs index 4eac8c4642..cb3ca3d28a 100644 --- a/src/SignalR/clients/csharp/Http.Connections.Client/src/HttpConnectionFactory.cs +++ b/src/SignalR/clients/csharp/Http.Connections.Client/src/HttpConnectionFactory.cs @@ -82,11 +82,10 @@ namespace Microsoft.AspNetCore.Http.Connections.Client // Internal for testing internal static HttpConnectionOptions ShallowCopyHttpConnectionOptions(HttpConnectionOptions options) { - return new HttpConnectionOptions + var newOptions = new HttpConnectionOptions { HttpMessageHandlerFactory = options.HttpMessageHandlerFactory, Headers = options.Headers, - ClientCertificates = options.ClientCertificates, Cookies = options.Cookies, Url = options.Url, Transports = options.Transports, @@ -99,6 +98,14 @@ namespace Microsoft.AspNetCore.Http.Connections.Client DefaultTransferFormat = options.DefaultTransferFormat, WebSocketConfiguration = options.WebSocketConfiguration, }; + + // WASM doesn't support Crypto APIs and our setter throws if you try to assign null + if (options.ClientCertificates != null) + { + newOptions.ClientCertificates = options.ClientCertificates; + } + + return newOptions; } } } diff --git a/src/SignalR/clients/csharp/Http.Connections.Client/src/HttpConnectionOptions.cs b/src/SignalR/clients/csharp/Http.Connections.Client/src/HttpConnectionOptions.cs index ef8b177eaf..cfbe155e9b 100644 --- a/src/SignalR/clients/csharp/Http.Connections.Client/src/HttpConnectionOptions.cs +++ b/src/SignalR/clients/csharp/Http.Connections.Client/src/HttpConnectionOptions.cs @@ -10,6 +10,7 @@ using System.Security.Cryptography.X509Certificates; using System.Threading; using System.Threading.Tasks; using Microsoft.AspNetCore.Connections; +using Microsoft.AspNetCore.Http.Connections.Client.Internal; namespace Microsoft.AspNetCore.Http.Connections.Client { @@ -28,7 +29,13 @@ namespace Microsoft.AspNetCore.Http.Connections.Client public HttpConnectionOptions() { _headers = new Dictionary(); - _clientCertificates = new X509CertificateCollection(); + + // System.Security.Cryptography isn't supported on WASM currently + if (!Utils.IsRunningInBrowser()) + { + _clientCertificates = new X509CertificateCollection(); + } + _cookies = new CookieContainer(); Transports = HttpTransports.All;