Пример #1
0
        /// <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));
        }
Пример #2
0
 /// <summary>
 /// Подписывает запрос клиентским сертификатом.
 /// </summary>
 /// <param name="request">Запрос для подписи.</param>
 private void SignRequest(SignedRequestBase request)
 {
     request.Sign(new ClientMessageSignVisitor());
 }