Вопрос с компонентом webview, x-ms-webview
, точнее. Плагин InAppBrowser использует этот компонент внутри. нашел обходной путь упомянутого here, это своего рода звучит как вопрос безопасности ТОГО так что это может получить зафиксированной в будущем, но здесь более подробно об указанном обходном:
сделать запрос к URL, который предполагается запустить виртуальную смарт-карту разблокировать получить доступ к сертификату пользователя, но с HttpClient на родной уровне (C#)
Я создал другую среду выполнения Windows компоненты в моем решении, которое делает простой POST к URL Я хочу получить доступ из InAppBrowser позже. При настройке Windows.Web.Http.HttpClient
я извлекаю сертификат пользователя из смарт-карты и устанавливаю его как HttpBaseProtocolFilter.ClientCertificate
.
public sealed class SSLHelper
{
private static String errorMessage = "";
private static String statusMessage = "";
public static IAsyncOperation<Boolean> establishSSLConnection(String url)
{
return connect(url).AsAsyncOperation<Boolean>();
}
public static String getErrorMessage()
{
return SSLHelper.errorMessage;
}
public static String getStatusMessage()
{
return SSLHelper.statusMessage;
}
private static async Task<Boolean> connect(String urlString)
{
Certificate clientCert = await getCertificateAsync();
HttpBaseProtocolFilter filter = new HttpBaseProtocolFilter();
filter.ClientCertificate = clientCert;
HttpClient client = new HttpClient(filter);
try
{
System.Uri url = new System.Uri(urlString);
HttpResponseMessage response = await client.PostAsync(url, new HttpStringContent(""));
response.EnsureSuccessStatusCode();
SSLHelper.statusMessage = response.StatusCode.ToString();
return true;
}
catch (Exception e)
{
SSLHelper.errorMessage = e.ToString();
return false;
}
}
private static async Task<Certificate> getCertificateAsync()
{
CertificateQuery query = new CertificateQuery();
query.IssuerName = "Sample Issuer";
IReadOnlyList<Certificate> certStores = await CertificateStores.FindAllAsync(query);
return certStores.FirstOrDefault<Certificate>();
}
}
сделать что код возврата, как обещание на уровне Javascript и как только он решает, запустить код, который использует InAppBrowser для доступа к защищенному URL снова. Собственный запрос вызывает запрос PIN-кода для доступа к виртуальной смарт-карте, как только вы ввели правильный PIN-код, InAppBrowser/WebView может магически установить соединение.