Неверный тип провайдера указан еще разC#

Место общения программистов C#
Ответить
Anonymous
 Неверный тип провайдера указан еще раз

Сообщение Anonymous »

Я уже просматривал эти вопросы и ответы на них:
  • "Указан неверный тип поставщика" CryptographicException при попытке загрузить закрытый ключ сертификата
    Как создать клиентские сертификаты для локального тестирования двусторонней аутентификации через SSL?
  • Указан неверный тип провайдера. CryptographicException
И этот блог, на который ссылается второй вопрос.
Я подозреваю, что существует проблема с эмитент сертификата, но я могу ошибаться.
Предисловие

Я новичок в аутентификации (вы можете прочитать это как идиот) . Текущий проект заключается в обновлении существующего веб-сайта и веб-приложения, написанных в Visual Studio 2013 .Net 4.5.1, до Visual Studio 2017 2017 .Net версии 4.6.1 для удовлетворения требований к новому брокеру сообщений.
Среда
  • Windows 10
  • Visual Studio 2017 (15.8. 1)
  • IIS 10
  • Microsoft SQL Server 2017
< strong>Описание проблемы

Веб-сервер, написанный на C#, выдает следующую ошибку во время аутентификации:
{"IDX10614: AsymmetricSecurityKey.GetSignatureFormater( 'http://www.w3.org/2001/04/xmldsig-more#rsa-sha256' ) threw an exception.
Key:
'System.IdentityModel.Tokens.X509AsymmetricSecurityKey'\nSignatureAlgorithm: 'http://www.w3.org/2001/04/xmldsig-more#rsa-sha256', check to make sure the SignatureAlgorithm is supported.\nException:'System.Security.Cryptography.CryptographicException: Invalid provider type specified.
at System.Security.Cryptography.Utils.CreateProvHandle(CspParameters parameters, Boolean randomKeyContainer)
at System.Security.Cryptography.Utils.GetKeyPairHelper(CspAlgorithmType keyType, CspParameters parameters, Boolean randomKeyContainer, Int32 dwKeySize, SafeProvHandle& safeProvHandle, SafeKeyHandle& safeKeyHandle)\r\n at System.Security.Cryptography.RSACryptoServiceProvider.GetKeyPair()
at System.Security.Cryptography.RSACryptoServiceProvider..ctor(Int32 dwKeySize, CspParameters parameters, Boolean useDefaultKeySize)
at System.Security.Cryptography.X509Certificates.X509Certificate2.get_PrivateKey()
at System.IdentityModel.Tokens.X509AsymmetricSecurityKey.get_PrivateKey()\r\n at System.IdentityModel.Tokens.X509AsymmetricSecurityKey.GetSignatureFormatter(String algorithm)
at System.IdentityModel.Tokens.AsymmetricSignatureProvider..ctor(AsymmetricSecurityKey key, String algorithm, Boolean willCreateSignatures)'.
If you only need to verify signatures the parameter 'willBeUseForSigning' should be false if the private key is not be available."}

Предпринятые шаги

Изначально не было сертификата для проверки, и это вызвало другую ошибку. В PowerShell от имени администратора:
New-SelfSignedCertificate -Subject "CN= XxxxxxxXXCA" -DnsName "localhost" -FriendlyName "XxxxxxxXXCA" -KeyUsage DigitalSignature -KeyUsageProperty ALL -KeyAlgorithm RSA -KeyLength 2048 -CertStoreLocation "Cert:\CurrentUser\My"

Затем:
  • Запустите MMC.
  • Скопируйте созданный сертификат в Local. Персональный компьютер
  • Скопируйте сертификат в доверенные корневые центры сертификации на локальном компьютере
  • Скопируйте сертификат в доверенные издатели на локальном компьютере
  • Запустить веб-сайт в IIS
  • Запустить веб-сервер в Visual Studio 2017.
  • Использование расширенного клиента REST (ARC) для отправки запроса на вход на сервер от клиента.
Просмотрите код аутентификации в отладчике Visual Studio 2017 в приведенном ниже коде:
Исключение выдается в операторе возврата.
public string GenerateToken(string email)
{

X509Store store = new X509Store(StoreLocation.LocalMachine);
store.Open(OpenFlags.ReadOnly);
var certs = store.Certificates;

X509Certificate2 signingCert =
certs.Cast().FirstOrDefault(cert => cert.FriendlyName == "XxxxxxxXXCA");
SigningCredentials signingCredentials = new X509SigningCredentials(signingCert);

var tokenHandler = new JwtSecurityTokenHandler();
var now = DateTime.UtcNow;

var customer = _customerService.GetCustomerByEmail(email);

var emailClaim = new Claim(ClaimTypes.Email, customer.Email, ClaimValueTypes.String);
var userIdClaim = new Claim(ClaimTypes.NameIdentifier, customer.Id.ToString(), ClaimValueTypes.Integer);
var roleClaim = new Claim(ClaimTypes.Role, "customer", ClaimValueTypes.String);

var claimsList = new List { emailClaim, userIdClaim, roleClaim };

var tokenDescriptor = new SecurityTokenDescriptor()
{
AppliesToAddress = "http://localhost/api",
SigningCredentials = signingCredentials,
TokenIssuerName = "http://localhost",
Lifetime = new Lifetime(now, now.AddDays(30)),
//Lifetime = new Lifetime(now, now.AddDays(1)),
Subject = new ClaimsIdentity(claimsList)
};

store.Close();
return tokenHandler.WriteToken(tokenHandler.CreateToken(tokenDescriptor));
}


Подробнее здесь: https://stackoverflow.com/questions/520 ... -more-time
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»