/// <summary> /// Производит проверку подписанного сообщения. /// </summary> /// <param name="signedRequest">Подписанное сообщение.</param> /// <returns>Домен пользователя.</returns> private Guid?CheckSignedMessage(SignedRequestBase signedRequest) { var key = RemontinkaServer.Instance.DataStore.GetCurrentPublicKey(signedRequest.UserID); if (key == null) { _logger.ErrorFormat("Для пользователя {0} отсутствует публичный ключ", signedRequest.UserID); throw new AuthException("Для пользователя отсутствует публичный ключ"); } //if if (key.IsRevoked) { _logger.ErrorFormat("Для пользователя {0} публичный ключ был отозван {1}", signedRequest.UserID, key.Number); throw new AuthException("Для пользователя отозванный публичный ключ"); } //if var data = signedRequest.GetDataForSign(new ServerMessageSignVisitor()); if (!RemontinkaServer.Instance.CryptoService.Verify(key.PublicKeyData, data, signedRequest.SignData, _signEncoding)) { _logger.InfoFormat("Сообщение {0} не прошло проверку у пользователя {1} с ключем {2}", signedRequest.Kind, signedRequest.UserID, key.Number); throw new AuthException("Сообщение не прошло проверку"); } return(RemontinkaServer.Instance.DataStore.GetUserDomainByUserID(signedRequest.UserID)); }
/// <summary> /// Подписывает запрос клиентским сертификатом. /// </summary> /// <param name="request">Запрос для подписи.</param> private void SignRequest(SignedRequestBase request) { request.Sign(new ClientMessageSignVisitor()); }