| 
	Статус: Участник
 Группы: Участники
Зарегистрирован: 26.06.2009(UTC)
 Сообщений: 12
 Откуда: Moscow
 
 | 
            
		      
                Добрый день! При подписывании XML возникает ошибка "Неверно сформированный элемент ссылки.". В подписываемом элементе Id указан следующим образом: Код:<soapenv:Body xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="test">
 В программе ссылка указывается следующим образом:  При вызове метода ComputeSignature появляется указанная выше ошибка. Подскажите, плз, в чем не прав? | 
    | 
             | 
            
         | 
    |  | 
        
        
        
            
        
            
            
    | 
	Статус: Активный участник
 Группы: Участники
 Зарегистрирован: 24.12.2007(UTC) Сообщений: 390  Откуда: КриптоПроПоблагодарили: 2 раз в 2 постах
 | 
            
		      
                Проблема в namespace атрибута Id, который отличается от namespace узла soapenv. Есть несколько решений1. Удалить у атрибута Id namespace
 2. Добавить к узлу soapenv:Body другой атрибут, на который ссылаться при подписи.
 3. Ссылаться при подписи на весь документ, а узел выбирать соответствующими transform
 | 
| С уважением, Александр. | 
    | 
             | 
            
         | 
    |  | 
        
        
        
    
        
            
            
    | 
	Статус: Участник
 Группы: Участники
Зарегистрирован: 26.06.2009(UTC)
 Сообщений: 12
 Откуда: Moscow
 
 | 
            
		      
                Т.е., как я понимаю, решить эту проблему только на стороне получателя нельзя? | 
    | 
             | 
            
         | 
    |  | 
        
        
        
            
        
            
            
    | 
	Статус: Активный участник
 Группы: Участники
 Зарегистрирован: 24.12.2007(UTC) Сообщений: 390  Откуда: КриптоПроПоблагодарили: 2 раз в 2 постах
 | 
            
		      
                Оказывается есть другой более простой метод - перекрыть метод GetIdElement у SignedXml и при подписи и проверке пользоваться этим классом. Код:
    class MySignedXml : SignedXml
    {
        public MySignedXml(XmlDocument document)
            :base(document)
        {
        }
        public override XmlElement GetIdElement(XmlDocument document, string idValue)
        {
            XmlNameTable myXmlNameTable = new NameTable();
            XmlNamespaceManager myNamespacemanager = new XmlNamespaceManager(myXmlNameTable);
            myNamespacemanager.AddNamespace( "wsu", 
                    "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" );
            XmlNodeList lst = document.SelectNodes("//*[@wsu:Id='" + idValue + "' or @wsu:ID='" + idValue + 
                    "' or @wsu:ID='" + idValue + "']", myNamespacemanager);
            if (lst.Count != 1)
                return null;
            return (XmlElement)lst.Item(0);
        }
    }
 | 
| С уважением, Александр. | 
    | 
             | 
            
         | 
    |  | 
        
        
        
    
        
            
            
    | 
	Статус: Участник
 Группы: Участники
Зарегистрирован: 26.06.2009(UTC)
 Сообщений: 12
 Откуда: Moscow
 
 | 
            
		      
                Спасибо, все получилось! :) | 
    | 
             | 
            
         | 
    |  | 
        
        
        
    
	                           
	
    
        Быстрый переход
         
	
    
    Вы не можете создавать новые темы в этом форуме.
	
	Вы не можете отвечать в этом форуме.
	
	Вы не можете удалять Ваши сообщения в этом форуме.
	
	Вы не можете редактировать Ваши сообщения в этом форуме.
	
	Вы не можете создавать опросы в этом форуме.
	
	Вы не можете голосовать в этом форуме.
	
	
    
    
        Important Information:
        The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
        
        
More Details
        Close