#asp.net #asp.net-core #ssl
Вопрос:
У меня есть два проекта: Web Api(сзади) и MVC(спереди). Веб-Api(back) имеет метод, который использует SSL-сертификат. Если запустить веб-Api(обратно) в локальном режиме, то метод работает, но если запустить веб-Api(обратно) в IIS и отправить сообщение в MVC(спереди) методу, то он обнаруживает ошибку «Произошла одна или несколько ошибок». (Не удалось установить SSL-соединение, см. Внутреннее исключение.). Код веб-Api(back)
public decimal GetIdentification(IdentificationModel identification, int key)
{
try
{
var handler = new HttpClientHandler();
var path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory,"cert\hgg.p12");
handler.ClientCertificates.Add(new X509Certificate2(path, _certPassword));
using (var httpClient = new HttpClient(handler))
{
using (var request = new HttpRequestMessage(new HttpMethod("POST"), _identityUrl "iin=" identification.IIN "amp;vendor=" _vendor))
{
string token = GetToken();
request.Headers.TryAddWithoutValidation("Authorization", "Bearer " token);
request.Headers.TryAddWithoutValidation("x-idempotency-key", "key:" "hggKey-" key);
request.Method = new HttpMethod("POST");
//request.Content = new StringContent(identification.Photo);
request.Content = new StreamContent(new MemoryStream(Convert.FromBase64String(identification.Photo)));
request.Content.Headers.ContentType = MediaTypeHeaderValue.Parse("image/png");
var response = httpClient.SendAsync(request);
string data = response.Result.Content.ReadAsStringAsync().Resu<
return JsonConvert.DeserializeObject<dynamic>(data).resu<
}
}
}
catch (Exception e)
{
throw new Exception("GetIdentification" e.Message);
}
}
public string GetToken()
{
var handler = new HttpClientHandler();
var path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "cert\hgg.p12");
handler.ClientCertificates.Add(new X509Certificate2(path, _certPassword));
try
{
using (var httpClient = new HttpClient(handler))
{
using (var request = new HttpRequestMessage(new HttpMethod("POST"), _tokenUrl))
{
request.Headers.TryAddWithoutValidation("Authorization", "Basic " _token);
request.Method = new HttpMethod("POST");
request.Content = new StringContent("grant_type=passwordamp;username=" _username "amp;password=" _password "amp;scope=identkey");
request.Content.Headers.ContentType = MediaTypeHeaderValue.Parse("application/x-www-form-urlencoded");
var response = httpClient.SendAsync(request);
return JsonConvert.DeserializeObject<dynamic>(response.Result.Content.ReadAsStringAsync().Result).access_token;
}
}
}
catch(Exception e)
{
throw new Exception("GetToken" e.Message path " " _certPassword);
}
}
}
MVC(спереди)
public string Identity(RequestClass<IdentificationModel> request)
{
ResponseClass<decimal> response = new ResponseClass<decimal>();
using (var httpClient = new HttpClient())
{
var json = JsonConvert.SerializeObject(request);
var data = new StringContent(json, Encoding.UTF8, "application/json");
var httpResponse =
httpClient.PostAsync(_apiUrl $"Identification", data).Resu<
string responseContent = httpResponse.Content.ReadAsStringAsync().Resu<
return responseContent;
}
}
Ответ №1:
У ApplicationPoolIdentity нет разрешения на certmgr.msc