přechod na části stránky

Upozornění:
Používáte prohlížeč IE verze 6. Od 1. června 2012 nebude možné se s tímto prohlížečem do prostředí eAGRI přihlásit. Proveďte upgrade na IE verze min. 7 nebo použijte jiný prohlížeč (např. Mozilla Firefox nebo Google Chrome). Další informace zde.

Postup tvorby HASHe

Pro implementaci zabezpečení (autorizace) služeb ze skupiny „PF“ je možné použít zjednodušenou autentizaci prostřednictvím přihlašovacích údajů do Portálu farmáře (konkrétně uživatelského jména a přístupového WS klíče, který je určen pro volání webových služeb). Formát autentizačního elementu je uveden zde. Tento element se vkládá do hlavičky SOAP obálky (SOAP:Header) – viz zde.

Jak vytvořit identifikační řetězec

Hodnota, která se vkládá do tohoto elementu, se vytváří pomocí následujících funkcí:

  • hashovací funkce SHA1
  • hashovací funkce SHA512
  • kanonizační transformace
    XmlDsigC14NTransform(Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#")

Pokud nebudete využívat komunikační modul vOKOsCom nebo vOKOsComSender, který je pro tyto potřeby k dispozici, ale chcete implementovat tuto funkci vlastními silami, budete pro implementaci výše uvedených funkcí potřebovat alespoň povrchní znalosti práce s xml a SOAP.

Simulátor výpočtu HASH s libovolnými vstupními údaji + ověření requestu na XSD služby

Pro výpočet jednotlivých kroků s využití reálných údajů (request a libovolný text jako WS klíč /pravý nebo fiktivní/) připravilo MZe interaktivní aplikaci. Tato aplikace vypočítá hodnoty v rámci jednotlivých kroků a tím umožní vývojáři odladit funkčnost své komponenty proti výsledkům jednotlivých kroků.

Aplikace také na základě identifikace služby v requestu provede ověření request na XSD konkrétní služby a případně vypíše chyby, pokud není request validní na XSD služby.

Aplikace je k dispozici Externí aplikace. Otevírá se do nového okna. zde.

Postup výpočtu je následující:

Z WS klíče pro volání webových služeb EPO vytvoříme SHA1 hashovací funkcí hash WS klíče (dále jen SHA1PWD - binárně) a mějme jej uložen v poli bytů (byte[]).

Z datové zprávy, kterou hodláme zabezpečit (a kterou máme již v SOAP obálce) vezmeme pouze SOAP:Body element a provedeme nad ním kanonizační transformaci, získáme tedy kanonizované SOAP:Body (dále jen CanonisedBody).

K CanonisedBody přičteme SHA1PWD (pozor ten je v binární podobě) (provedeme konkatenaci CanonisedBody a SHA1PWD) a provedeme výpočet SHA512 hashovací funkce nad tímto řetezcem.
Ukázka vstupu pro výpočet SHA512:

Výsledné pole bytů (z SHA512 fce) převedeme na base64, takto získáme zabezpečovací token, dále MessageToken

Vytvoříme novou SOAP:Header hlavičku (<vOKO-wss:Token xmlns:vOKO-wss="http://www.pds.eu/vOKO/v0200/wss"/>) která dále bude obsahovat atribut type s konstantní hodnotou „A01“, obsahem této hlavičky pak bude MessageToken.

Celá hlavička pak bude vypadat např. takto:

<vOKO-wss:Token type="A01" xmlns:vOKO-wss="http://www.pds.eu/vOKO/v0200/wss">UDu9cWkK9xryGvSJl7HhT6JgrmKcSfkYv3DPZc75GZpDbVU2RDR9envDjiR7fwPBxDEqFo/sUqI9fk6U3+GZmg==</vOKO-wss:Token>

 

Dále ve vlastní zprávě je u takto zabezpečených služeb povinnost vyplnění atributu „dn“ elementu UIDkey – tento atribut se plní přihlašovacím jménem k portálu farmáře (například 99lojza001).

Dále pro kontrolu přikládám příklad zprávy a výstupů hashovacích funkcí:

Kontrolní zpráva:

<SOAP:Envelope xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/">   <SOAP:Header />   <SOAP:Body>     <XML>       <pokus/>       <pokus logo="as asa" ></pokus>     </XML>   </SOAP:Body> </SOAP:Envelope>    

Kanonizovaná zpráva:

<SOAP:Body xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/"><XML><pokus></pokus><pokus logo="as asa"></pokus></XML></SOAP:Body>     

Zpráva kompletní (vstup pro SHA1PWD je „WS klíč“):

<SOAP:Envelope xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/"><SOAP:Header><vOKO-wss:Token type="A01" xmlns:vOKO-wss="http://www.pds.eu/vOKO/v0200/wss">UDu9cWkK9xryGvSJl7HhT6JgrmKcSfkYv3DPZc75GZpDbVU2RDR9envDjiR7fwPBxDEqFo/sUqI9fk6U3+GZmg==</vOKO-wss:Token></SOAP:Header><SOAP:Body><XML><pokus /><pokus logo="as asa"></pokus></XML></SOAP:Body></SOAP:Envelope>     

SHA1 řetězce „heslo“ (v base64):

bgF7VGT4IKbBu16fbXEaZnqA2Oo=

SHA512 celé zprávy(MessageToken v base64):

UDu9cWkK9xryGvSJl7HhT6JgrmKcSfkYv3DPZc75GZpDbVU2RDR9envDjiR7fwPBxDEqFo/sUqI9fk6U3+GZmg==