WSDL (SOAP Web Services)
Úvod
Co je WSDL a SOAP?
WSDL (Web Services Description Language) je XML-based jazyk pro popis webových služeb. WSDL definuje rozhraní, které popisuje, jaké operace může webová služba provádět, jaké parametry očekává a jaká data vrací.
SOAP (Simple Object Access Protocol) je protokol pro výměnu strukturovaných informací při implementaci webových služeb. SOAP používá XML formát pro zprávy a typicky běží přes HTTP nebo HTTPS.
K čemu slouží modul WSDL v eIntranetu?
Modul WSDL v systému eIntranet poskytuje standardizované rozhraní pro integraci s externími aplikacemi prostřednictvím SOAP webových služeb. Hlavním účelem je umožnit:
- Single Sign-On (SSO) - Automatické přihlašování uživatelů z externích systémů do eIntranetu bez nutnosti zadávat přihlašovací údaje
- Bezpečnou integraci - Generování časově omezených přístupových URL pro konkrétní uživatele a moduly
- Platformovou nezávislost - SOAP služby mohou být volány z jakéhokoli programovacího jazyka (PHP, C#, Java, Python, atd.)
- Externí přístup - Umožňuje externím aplikacím, mobilním aplikacím nebo webovým portálům přesměrovat uživatele přímo do konkrétního modulu eIntranetu
Typické případy použití
- Podnikový portál - Zaměstnanci se přihlásí do firemního portálu a odtud mohou přímo přistupovat do různých modulů eIntranetu (docházka, dovolené, faktury) bez opětovného přihlašování
- Mobilní aplikace - Mobilní aplikace může generovat přístupové URL pro zobrazení konkrétního modulu v mobilním prohlížeči s automatickým přihlášením
- Iframe integrace - Externí systém může zobrazit konkrétní modul eIntranetu v iframe s automatickým přihlášením uživatele
- Email odkazy - Automatické generování odkazů v emailech, které po kliknutí přihlásí uživatele a zobrazí konkrétní obsah
- Workflow integrace - Propojení eIntranetu s jinými business aplikacemi pro automatické přepínání mezi systémy
Hlavní funkce modulu
Služba eIAccess
Modul WSDL v současné době poskytuje jednu hlavní SOAP službu nazvanou eIAccess. Tato služba slouží k generování bezpečných, časově omezených přístupových URL pro uživatele eIntranetu.
Klíčové vlastnosti služby eIAccess:
- Generuje unikátní URL pro konkrétního uživatele
- URL je platná pouze 15 minut od vygenerování
- URL obsahuje šifrovaný autentizační token
- Přesměruje uživatele do konkrétního modulu eIntranetu
- Automaticky přihlásí uživatele bez zadávání hesla
- Zaznamenává přihlášení do historie přihlášení uživatele
Bezpečnostní mechanismy
Služba eIAccess implementuje několik bezpečnostních vrstev:
- WSDLAuthCode - 66-znakový autentizační kód, který musí znát volající aplikace
- Ověření uživatele - Kombinace UserID a UserEmail musí přesně odpovídat záznamu v databázi
- Časové omezení - Vygenerovaná URL je platná pouze 15 minut
- Šifrování tokenu - AuthToken je šifrován pomocí AES-256-CBC
- Validace modulu - Lze generovat URL pouze pro existující a aktivní moduly
- HTTPS doporučeno - Pro produkční prostředí je důrazně doporučeno používat HTTPS
Nastavení modulu
Aktivace modulu WSDL
Modul WSDL musí být nejprve aktivován pro vaši společnost. Aktivaci může provést pouze správce systému nebo uživatel s administrátorskými právy k modulu WSDL.
- Přihlaste se do eIntranetu jako administrátor
- Přejděte do Nastavení > Moduly
- Vyhledejte modul WSDL (SOAP Web Services)
- Aktivujte modul zaškrtnutím políčka
- Uložte změny
Přístup k nastavení WSDL
Po aktivaci modulu získáte přístup k nastavení WSDL:
- V hlavním menu přejděte do Nastavení
- V levém menu klikněte na WSDL (SOAP)
- Zobrazí se stránka s nastavením WSDL
Získání WSDLAuthCode
WSDLAuthCode je 66-znakový autentizační kód, který je automaticky vygenerován při prvním zobrazení stránky nastavení WSDL.
Postup získání WSDLAuthCode:
- Otevřete Nastavení > WSDL (SOAP)
- Přejděte na záložku Obecné nastavení
- V sekci "Společné nastavení pro všechna WSDL" najdete řádek WSDLAuthCode:
- Za dvojtečkou je zobrazen váš 66-znakový autentizační kód
- Zkopírujte tento kód a bezpečně jej uložte
Důležité bezpečnostní upozornění:
- WSDLAuthCode je velmi citlivý údaj - kdo jej má, může generovat přístupové URL pro libovolného uživatele
- Nikdy nesdílejte WSDLAuthCode veřejně nebo prostřednictvím nezabezpečené komunikace
- Ukládejte WSDLAuthCode pouze v zabezpečených konfiguračních souborech na serveru
- Pravidelně kontrolujte, kdo má přístup k tomuto kódu
- V případě kompromitace kontaktujte administrátora pro vygenerování nového kódu
Regenerace WSDLAuthCode
Pokud dojde ke kompromitaci WSDLAuthCode nebo potřebujete z bezpečnostních důvodů změnit autentizační kód, je nutné:
- Kontaktovat správce systému nebo databázového administrátora
- Požádat o vymazání aktuálního WSDLAuthCode z databázové tabulky Company
- Po vymazání se při dalším zobrazení stránky nastavení WSDL automaticky vygeneruje nový kód
- Aktualizovat WSDLAuthCode ve všech externích aplikacích, které službu používají
Přístupová práva
Kdo má přístup k nastavení WSDL?
Přístup k nastavení modulu WSDL mají pouze uživatelé s administrátorskými právy:
- Globální administrátoři - Uživatelé s nastaveným příznakem "admin" v uživatelském profilu
- Moduloví administrátoři - Uživatelé, kteří mají v poli "AdminToModules_ser_arr" uvedeno "WSDL"
Běžní uživatelé nemají přístup k nastavení WSDL a nemohou vidět WSDLAuthCode.
Práva uživatelů pro přístup přes WSDL
Pro úspěšné vygenerování a použití přístupové URL musí uživatel splňovat následující podmínky:
- Uživatel musí být naimportován v sekci Nastavení > Uživatelé
- Uživatel musí mít aktivní účet (není zakázán)
- Uživatel musí mít nastavená správná práva pro modul, do kterého má být přesměrován
- Email uživatele musí být jedinečný a správně vyplněný v systému
- UserID musí odpovídat internímu identifikátoru uživatele v databázi eIntranetu
Použití služby eIAccess
Základní informace o službě
WSDL URL: https://vase-domena.eintranet.net/wsdl/eIAccess.php?wsdl
SOAP Endpoint URL: https://vase-domena.eintranet.net/wsdl/eIAccess.php
SOAP verze: SOAP 1.2
Styl SOAP: RPC (Remote Procedure Call)
Kódování: SOAP Encoding
Namespace: https://vase-domena.eintranet.net/wsdl/eIAccess.php
Funkce GenerateAccessUrl
Služba eIAccess poskytuje jednu hlavní funkci: GenerateAccessUrl
Popis funkce: Vygeneruje časově omezenou URL pro přístup konkrétního uživatele do konkrétního modulu eIntranetu.
Vstupní parametry
1. WSDLAuthCode (string, povinný)
- Popis: 66-znakový autentizační kód pro ověření oprávnění volající aplikace
- Typ: xsd:string
- Délka: 66 znaků
- Příklad: "a1B2c3D4e5F6g7H8i9J0k1L2m3N4o5P6q7R8s9T0u1V2w3X4y5Z6a7B8c9D0e1F2g3H4"
- Kde získat: V nastavení WSDL v záložce "Obecné nastavení"
- Bezpečnost: Nikdy nesdílejte veřejně, ukládejte pouze v zabezpečených konfiguračních souborech
2. UserID (string, povinný)
- Popis: Interní číselný identifikátor uživatele v databázi eIntranetu
- Typ: xsd:string (obsahuje číslo)
- Formát: Pouze číslice, např. "123", "4567"
- Příklad: "42"
- Kde získat: V administraci uživatelů (sloupec idUser) nebo z externího systému, který má synchronizovaná data uživatelů
- Validace: Musí být platné číslo, jinak vrátí chybu "Bad UserID!"
3. UserEmail (string, povinný)
- Popis: Emailová adresa uživatele přesně tak, jak je uložena v eIntranetu
- Typ: xsd:string
- Formát: Validní emailová adresa
- Délka: 4-80 znaků
- Příklad: "jan.novak@firma.cz"
- Validace: Musí odpovídat emailu uživatele s daným UserID, jinak vrátí chybu "Not existing User!"
- Bezpečnost: Kombinace UserID a UserEmail slouží jako dodatečné ověření identity
4. ModuleName (string, povinný)
- Popis: Interní název modulu eIntranetu, do kterého má být uživatel přesměrován
- Typ: xsd:string
- Formát: Malá písmena, bez mezer
- Příklad: "wiki", "dochazka", "dovolena", "crm"
- Kde získat: Seznam dostupných modulů je uveden v nastavení WSDL nebo níže v této dokumentaci
- Validace: ModuleName musí existovat a být aktivní pro vaši společnost, jinak vrátí chybu "Not existing ModuleName!"
Návratové hodnoty
Funkce vrací pole (array) se čtyřmi klíči:
1. ResponseCode (integer)
- Popis: Návratový kód indikující úspěch nebo selhání operace
- Hodnota 1: Operace byla úspěšná, URL vygenerována
- Hodnota 0: Operace selhala, zkontrolujte ResponseErrorText
2. ResponseErrorText (string)
- Popis: Textová chybová hláška (prázdná při úspěchu)
- Možné hodnoty:
- "" (prázdný string) - žádná chyba
- "Bad WSDLAuthCode!" - Nesprávný autentizační kód
- "Bad UserID!" - UserID není platné číslo
- "Bad UserEmail!" - Email není ve správném formátu
- "Not existing ModuleName!" - Modul neexistuje nebo není aktivní
- "Not existing User!" - Kombinace UserID a UserEmail neodpovídá žádnému uživateli
3. ResponseURL (string)
- Popis: Vygenerovaná přístupová URL (prázdná při chybě)
- Formát: https://vase-domena.eintranet.net?modul=NAZEV&idUser=ID&AuthToken=TOKEN
- Příklad: https://demo.eintranet.net?modul=wiki&idUser=42&AuthToken=MTIzNGFiY2Rlf...
- Platnost: 15 minut od vygenerování
- Poznámka: URL může obsahovat HTML entity (& místo &), které je třeba dekódovat
4. ResponseURLValidTill (string)
- Popis: Časové razítko udávající do kdy je URL platná (prázdné při chybě)
- Formát: ISO 8601 / RFC 3339 (DATE_ATOM)
- Příklad: "2024-01-20T15:30:45+01:00"
- Použití: Pro ověření, zda je URL stále platná před přesměrováním uživatele
Formát SOAP požadavku
SOAP požadavek musí být zaslán metodou POST na endpoint URL s následující strukturou:
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:eiac="https://vase-domena.eintranet.net/wsdl/eIAccess.php">
<soapenv:Header/>
<soapenv:Body>
<eiac:GenerateAccessUrl soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<WSDLAuthCode>a1B2c3D4e5F6g7H8i9J0k1L2m3N4o5P6q7R8s9T0u1V2w3X4y5Z6a7B8c9D0e1F2g3H4</WSDLAuthCode>
<UserID>42</UserID>
<UserEmail>jan.novak@firma.cz</UserEmail>
<ModuleName>wiki</ModuleName>
</eiac:GenerateAccessUrl>
</soapenv:Body>
</soapenv:Envelope>
Důležité poznámky k požadavku:
- Namespace
xmlns:eiacmusí odpovídat vaší doméně - Všechny parametry musí být uvedeny ve správném pořadí
- Content-Type HTTP hlavičky musí být:
text/xml; charset=utf-8 - SOAPAction hlavička může být prázdná nebo obsahovat:
https://vase-domena.eintranet.net/wsdl/eIAccess.php#GenerateAccessUrl
Formát SOAP odpovědi
Úspěšná odpověď (ResponseCode = 1)
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ns1="https://vase-domena.eintranet.net/wsdl/eIAccess.php"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:ns2="http://xml.apache.org/xml-soap"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
<ns1:GenerateAccessUrlResponse>
<return xsi:type="ns2:Map">
<item>
<key xsi:type="xsd:string">ResponseCode</key>
<value xsi:type="xsd:int">1</value>
</item>
<item>
<key xsi:type="xsd:string">ResponseErrorText</key>
<value xsi:type="xsd:string"/>
</item>
<item>
<key xsi:type="xsd:string">ResponseURL</key>
<value xsi:type="xsd:string">https://demo.eintranet.net?modul=wiki&idUser=42&AuthToken=MTIzNGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVld...</value>
</item>
<item>
<key xsi:type="xsd:string">ResponseURLValidTill</key>
<value xsi:type="xsd:string">2024-01-20T15:30:45+01:00</value>
</item>
</return>
</ns1:GenerateAccessUrlResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Chybová odpověď (ResponseCode = 0)
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ns1="https://vase-domena.eintranet.net/wsdl/eIAccess.php"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:ns2="http://xml.apache.org/xml-soap"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
<ns1:GenerateAccessUrlResponse>
<return xsi:type="ns2:Map">
<item>
<key xsi:type="xsd:string">ResponseCode</key>
<value xsi:type="xsd:int">0</value>
</item>
<item>
<key xsi:type="xsd:string">ResponseErrorText</key>
<value xsi:type="xsd:string">Bad WSDLAuthCode!</value>
</item>
<item>
<key xsi:type="xsd:string">ResponseURL</key>
<value xsi:type="xsd:string"/>
</item>
<item>
<key xsi:type="xsd:string">ResponseURLValidTill</key>
<value xsi:type="xsd:string"/>
</item>
</return>
<ns1:GenerateAccessUrlResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Zpracování odpovědi a dekódování HTML entit
Důležité upozornění: V závislosti na SOAP knihovně, kterou používáte, může být ResponseURL vrácena s HTML entitami & místo znaku &.
Příklad problematické URL:
https://demo.eintranet.net?modul=wiki&idUser=42&AuthToken=TOKEN
Správná URL po dekódování:
https://demo.eintranet.net?modul=wiki&idUser=42&AuthToken=TOKEN
Před použitím URL je nutné provést dekódování HTML entit:
V PHP:
$url = html_entity_decode($response['ResponseURL'], ENT_QUOTES | ENT_HTML401, 'UTF-8');
V C#:
string url = System.Net.WebUtility.HtmlDecode(response.ResponseURL);
V Python:
import html
url = html.unescape(response['ResponseURL'])
V JavaScript:
function decodeHtml(html) {
var txt = document.createElement("textarea");
txt.innerHTML = html;
return txt.value;
}
var url = decodeHtml(response.ResponseURL);
Seznam dostupných modulů pro integraci
Následující tabulka obsahuje běžné moduly eIntranetu, které lze použít jako parametr ModuleName. Konkrétní seznam dostupných modulů pro vaši společnost naleznete v nastavení WSDL v záložce "eIAccess".
Základní moduly:
- wiki - Firemní wiki a znalostní báze
- dochazka - Evidence docházky
- dovolena - Správa dovolených a absence
- cestaky - Cestovní příkazy a výdaje
- ukoly - Správa úkolů
- crm - Zákaznické vztahy (CRM)
- faktury_vydane - Vydané faktury
- prijate_faktury - Přijatté faktury
- sklad - Skladové hospodářství
- evidence_majetku - Evidence majetku
- helpdesk - Helpdesk a tickety
- projekty - Projektové řízení
- smlouvy - Správa smluv
- dokumenty - Správa dokumentů
- kalendar - Kalendář a události
- evoz - Evidenční kniha vozidel
- ISDScz - Datové schránky (Česká republika)
- nastaveni - Nastavení systému
- zpravy - Interní zprávy
- aktuality - Firemní aktuality
Poznámka: Dostupnost modulů závisí na:
- Aktivaci modulu pro vaši společnost
- Licenci a balíčku eIntranetu
- Konfiguraci administrátora
Pro získání přesného seznamu všech aktivních modulů pro vaši společnost:
- Přejděte do Nastavení > WSDL (SOAP)
- Otevřete záložku eIAccess
- Na konci stránky najdete sekci "Dostupné ModuleName" se seznamem všech modulů ve formátu: "Název modulu: nazev_modulu"
Požadavky na uživatele
Import uživatelů
Před použitím služby eIAccess musí být všichni uživatelé naimportováni do eIntranetu:
- Přejděte do Nastavení > Uživatelé
- Klikněte na Přidat nového uživatele
- Vyplňte povinné údaje:
- Jméno a příjmení
- Email - musí být jedinečný a validní
- Uživatelské jméno (login)
- Heslo - i když se uživatel přihlašuje přes WSDL, heslo je povinné
- Uložte uživatele
- Poznamenejte si idUser (ID uživatele) - tuto hodnotu budete potřebovat pro volání WSDL
Získání UserID existujícího uživatele:
- Přejděte do Nastavení > Uživatelé
- Vyhledejte požadovaného uživatele
- Klikněte na jméno uživatele pro zobrazení detailu
- V URL adrese najdete parametr
idUser=CISLO- toto číslo je UserID - Případně lze UserID najít v seznamu uživatelů jako sloupec "ID"
Nastavení práv uživatelů
Pro úspěšné přihlášení přes WSDL a přístup k modulu musí mít uživatel nastavená příslušná práva:
- Otevřete detail uživatele v Nastavení > Uživatelé
- Přejděte na záložku Práva
- Pro každý modul, do kterého má uživatel přistupovat přes WSDL:
- Zaškrtněte příslušné právo (např. "rights_wiki", "rights_dochazka")
- Nastavte úroveň práv (zobrazení, editace, mazání)
- Uložte změny
Příklad: Pokud chcete generovat URL pro modul "wiki", uživatel musí mít nastaveno právo "rights_wiki" minimálně na úroveň zobrazení.
Ověření emailové adresy
Email uživatele musí být:
- Validní - ve správném formátu email@domena.cz
- Jedinečný - žádní dva uživatelé nemohou mít stejný email
- Přesně shodný - při volání WSDL musí parametr UserEmail přesně odpovídat emailu v databázi (včetně velikosti písmen, i když doporučujeme používat malá písmena)
- Délka 4-80 znaků - kratší nebo delší email bude odmítnut
Bezpečnost
Ochrana WSDLAuthCode
WSDLAuthCode je nejvýznamnější bezpečnostní prvek celého systému. Jeho kompromitace umožňuje útočníkovi generovat přístupové URL pro libovolného uživatele.
Doporučené bezpečnostní postupy:
- Ukládání: WSDLAuthCode ukládejte pouze v zabezpečených konfiguračních souborech na serveru, nikdy v kódu aplikace nebo veřejně přístupných souborech
- Přístup: Omezte přístup ke konfiguračním souborům pouze na nezbytné uživatele a procesy
- Verzování: Nikdy nenahrávejte soubory obsahující WSDLAuthCode do verzovacích systémů (Git, SVN)
- Logování: Nelogujte WSDLAuthCode do aplikačních logů
- Šifrování: Pokud ukládáte WSDLAuthCode v databázi externí aplikace, šifrujte jej
- Monitoring: Pravidelně kontrolujte přístup k WSDL službám a detekujte podezřelou aktivitu
- Rotace: Zvažte pravidelnou rotaci WSDLAuthCode (např. každých 6-12 měsíců)
HTTPS komunikace
Pro produkční prostředí je POVINNÉ používat HTTPS protokol:
- Zabezpečení přenosu: HTTPS šifruje veškerou komunikaci mezi klientem a serverem
- Ochrana WSDLAuthCode: Bez HTTPS by WSDLAuthCode mohl být odposlouchán při přenosu
- Ochrana AuthToken: I když je AuthToken šifrován, přenos musí být zabezpečen
- Certifikát: Používejte platný SSL/TLS certifikát od důvěryhodné certifikační autority
- TLS verze: Používejte minimálně TLS 1.2, doporučeno TLS 1.3
Testovací prostředí: HTTP lze používat pouze v izolovaném vývojovém/testovacím prostředí bez přístupu z internetu.
Časové limity
Služba eIAccess implementuje dvě úrovně časových limitů:
1. Prodleva při volání (2 sekundy)
- Každé volání WSDL služby má úmyslnou prodlevu 2 sekundy
- Účel: Ochrana proti brute-force útokům na WSDLAuthCode
- Implikace: Služba není vhodná pro real-time aplikace vyžadující okamžitou odezvu
2. Platnost URL (15 minut)
- Vygenerovaná URL je platná pouze 15 minut od vytvoření
- Po uplynutí platnosti vrátí systém chybu a uživatel se musí přihlásit standardním způsobem
- AuthToken obsahuje časové razítko (TokenValidTill), které se kontroluje při každém použití
- Doporučení: Generujte URL těsně před jejím použitím, neukládejte ji na dlouhou dobu
3. Jednorázové použití
- I když je URL platná 15 minut, doporučujeme považovat ji za jednorázovou
- Po prvním použití by uživatel měl zůstat přihlášen pomocí standardní session
- Opakované použití stejné URL sice funguje (v rámci 15 minut), ale není to doporučená praxe
Šifrování AuthToken
AuthToken obsahuje citlivé informace a je chráněn pomocí AES-256-CBC šifrování:
- Algoritmus: AES-256-CBC (Advanced Encryption Standard, 256-bit klíč, Cipher Block Chaining mode)
- Klíč: Odvozený od tajného saltu "TakToNejakZahashujAtJeToAlePoradNe5s2Q"
- Obsah tokenu: Serializované pole obsahující:
- idCompany - ID společnosti
- idUser - ID uživatele
- UserEmail - Email uživatele
- TokenValidTill - Unix timestamp platnosti
- Validace: Při použití URL systém ověří všechny hodnoty v tokenu proti aktuálním datům
- Ochrana proti manipulaci: Jakákoli změna v tokenu způsobí selhání dešifrování
IP adresa a logování
Každé přihlášení přes WSDL je zaznamenáno stejně jako standardní přihlášení:
- Tabulka User_login: Zaznamenává IP adresu, DNS jméno, čas přihlášení
- User.last_login_ip: Aktualizuje poslední IP adresu přihlášení
- Device: Přihlášení je označeno jako "Computer/Browser"
- Audit trail: Umožňuje zpětně dohledat, kdy a odkud se uživatel přihlásil
Doporučení pro monitoring:
- Pravidelně kontrolujte logy přihlášení přes WSDL
- Nastavte upozornění na podezřelou aktivitu (např. přihlášení ze zahraničí)
- Monitorujte frekvenci volání WSDL API
Typické případy použití
Případ 1: Podnikový portál (SharePoint, intranetový portál)
Scénář: Společnost používá SharePoint jako hlavní podnikový portál. Chtějí, aby zaměstnanci mohli z SharePointu kliknout na odkaz a přejít přímo do modulu docházky v eIntranetu bez opětovného přihlašování.
Řešení:
- SharePoint má synchronizovaný seznam uživatelů s eIntranetem (včetně UserID a emailů)
- Na SharePoint stránce je tlačítko "Má docházka"
- Po kliknutí na tlačítko se zavolá backend skript, který:
- Získá UserID a email aktuálně přihlášeného uživatele
- Zavolá WSDL službu eIAccess s parametry (WSDLAuthCode, UserID, UserEmail, "dochazka")
- Získá ResponseURL
- Přesměruje uživatele na ResponseURL
- Uživatel je automaticky přihlášen v eIntranetu a vidí svou docházku
Výhody: Bezproblémové uživatelské prostředí, žádné další přihlašování
Případ 2: Mobilní aplikace s webview
Scénář: Společnost má mobilní aplikaci pro zaměstnance. Pro některé funkce (např. schvalování dovolených) chtějí využít existující web rozhraní eIntranetu namísto vytváření nativního UI.
Řešení:
- Mobilní aplikace má vlastní přihlašovací systém
- Po přihlášení uživatel klikne na "Schválit dovolené"
- Aplikace zavolá WSDL službu s parametry uživatele a modulem "dovolena"
- Získá URL a otevře ji v webview (vestavěný prohlížeč)
- Uživatel vidí rozhraní pro schvalování dovolených z eIntranetu
- Po dokončení akce se webview zavře a uživatel pokračuje v mobilní aplikaci
Výhody: Nemusí se duplikovat funkcionalita, rychlejší vývoj mobilní aplikace
Případ 3: Email notifikace s přímým odkazem
Scénář: Systém posílá email nadřízenému, že má schválit novou dovolenkovou žádost. V emailu má být odkaz, který po kliknutí zobrazí přímo danou žádost.
Řešení:
- Při vytvoření žádosti se spustí cron job nebo background proces
- Proces zavolá WSDL službu s parametry nadřízeného a modulem "dovolena"
- Do emailu vloží vygenerovanou URL s přidaným parametrem pro konkrétní žádost
- Nadřízený klikne na odkaz v emailu
- Je automaticky přihlášen a vidí detail žádosti
Upozornění: URL je platná pouze 15 minut, pro emaily je lepší použít standardní odkaz s přihlášením nebo generovat URL až při kliknutí (přes redirect skript)
Případ 4: Iframe integrace do externího systému
Scénář: Firma používá ERP systém a chce v něm zobrazovat informace o fakturách z eIntranetu přes iframe.
Řešení:
- V ERP systému je stránka "Detail zákazníka"
- Na této stránce je iframe pro zobrazení faktur zákazníka z eIntranetu
- Při načtení stránky se zavolá WSDL služba s parametry aktuálního uživatele ERP a modulem "faktury_vydane"
- Iframe načte vygenerovanou URL s filtrem na konkrétního zákazníka
- Uživatel vidí faktury zákazníka přímo v ERP systému
Poznámka: Kvůli 15minutové platnosti je nutné pravidelně obnovovat URL nebo implementovat refresh mechanismus
Případ 5: SSO napříč více systémy
Scénář: Společnost má centrální autentizační systém (LDAP, Active Directory, OAuth) a chce, aby všichny aplikace včetně eIntranetu používaly tento systém.
Řešení:
- Uživatel se přihlásí do centrálního systému
- Centrální systém má middleware, který:
- Mapuje uživatele na jejich UserID a email v eIntranetu
- Když uživatel chce přejít do eIntranetu, zavolá WSDL službu
- Přesměruje uživatele na vygenerovanou URL
- Uživatel se automaticky přihlásí v eIntranetu
- Session v eIntranetu pokračuje standardním způsobem
Výhody: Jednotné přihlášení (Single Sign-On) pro všechny aplikace v organizaci
Příklady integrace v různých jazycích
Příklad 1: PHP s SoapClient
<?php
// Konfigurace
$wsdlUrl = 'https://vase-domena.eintranet.net/wsdl/eIAccess.php?wsdl';
$wsdlAuthCode = 'a1B2c3D4e5F6g7H8i9J0k1L2m3N4o5P6q7R8s9T0u1V2w3X4y5Z6a7B8c9D0e1F2g3H4';
// Parametry uživatele
$userId = '42';
$userEmail = 'jan.novak@firma.cz';
$moduleName = 'wiki';
try {
// Vytvoření SOAP klienta
$client = new SoapClient($wsdlUrl, [
'soap_version' => SOAP_1_2,
'trace' => 1,
'exceptions' => true,
'cache_wsdl' => WSDL_CACHE_NONE
]);
// Volání funkce GenerateAccessUrl
$response = $client->GenerateAccessUrl(
$wsdlAuthCode,
$userId,
$userEmail,
$moduleName
);
// Kontrola odpovědi
if ($response['ResponseCode'] == 1) {
// Úspěch - dekódování HTML entit
$url = html_entity_decode($response['ResponseURL'], ENT_QUOTES | ENT_HTML401, 'UTF-8');
echo "URL vygenerována úspěšně:\n";
echo "URL: " . $url . "\n";
echo "Platná do: " . $response['ResponseURLValidTill'] . "\n";
// Přesměrování uživatele
header("Location: " . $url);
exit;
} else {
// Chyba
echo "Chyba při generování URL:\n";
echo "Kód: " . $response['ResponseCode'] . "\n";
echo "Chyba: " . $response['ResponseErrorText'] . "\n";
}
} catch (SoapFault $e) {
echo "SOAP chyba: " . $e->getMessage() . "\n";
echo "Detail: " . $e->getTraceAsString() . "\n";
}
?>
Příklad 2: C# s WCF
using System;
using System.ServiceModel;
using System.Web;
namespace EIntranetWSDLClient
{
class Program
{
static void Main(string[] args)
{
// Konfigurace
string wsdlUrl = "https://vase-domena.eintranet.net/wsdl/eIAccess.php?wsdl";
string wsdlAuthCode = "a1B2c3D4e5F6g7H8i9J0k1L2m3N4o5P6q7R8s9T0u1V2w3X4y5Z6a7B8c9D0e1F2g3H4";
// Parametry uživatele
string userId = "42";
string userEmail = "jan.novak@firma.cz";
string moduleName = "wiki";
try
{
// Vytvoření SOAP klienta (předpokládá vygenerovanou service reference)
var binding = new BasicHttpBinding(BasicHttpSecurityMode.Transport);
var endpoint = new EndpointAddress(wsdlUrl.Replace("?wsdl", ""));
var client = new eIAccessPortClient(binding, endpoint);
// Volání funkce
var response = client.GenerateAccessUrl(
wsdlAuthCode,
userId,
userEmail,
moduleName
);
// Kontrola odpovědi
if (response.ResponseCode == 1)
{
// Dekódování HTML entit
string url = HttpUtility.HtmlDecode(response.ResponseURL);
Console.WriteLine("URL vygenerována úspěšně:");
Console.WriteLine("URL: " + url);
Console.WriteLine("Platná do: " + response.ResponseURLValidTill);
// Otevření URL v prohlížeči
System.Diagnostics.Process.Start(url);
}
else
{
Console.WriteLine("Chyba při generování URL:");
Console.WriteLine("Kód: " + response.ResponseCode);
Console.WriteLine("Chyba: " + response.ResponseErrorText);
}
}
catch (Exception ex)
{
Console.WriteLine("Chyba: " + ex.Message);
}
}
}
}
Příklad 3: Python s zeep knihovnou
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from zeep import Client
from zeep.transports import Transport
from requests import Session
import html
# Konfigurace
WSDL_URL = 'https://vase-domena.eintranet.net/wsdl/eIAccess.php?wsdl'
WSDL_AUTH_CODE = 'a1B2c3D4e5F6g7H8i9J0k1L2m3N4o5P6q7R8s9T0u1V2w3X4y5Z6a7B8c9D0e1F2g3H4'
# Parametry uživatele
USER_ID = '42'
USER_EMAIL = 'jan.novak@firma.cz'
MODULE_NAME = 'wiki'
def generate_access_url(wsdl_auth_code, user_id, user_email, module_name):
"""
Vygeneruje přístupovou URL pro uživatele eIntranetu
"""
try:
# Vytvoření session s SSL ověřením
session = Session()
session.verify = True
transport = Transport(session=session)
# Vytvoření SOAP klienta
client = Client(WSDL_URL, transport=transport)
# Volání funkce
response = client.service.GenerateAccessUrl(
WSDLAuthCode=wsdl_auth_code,
UserID=user_id,
UserEmail=user_email,
ModuleName=module_name
)
# Kontrola odpovědi
if response['ResponseCode'] == 1:
# Dekódování HTML entit
url = html.unescape(response['ResponseURL'])
print("URL vygenerována úspěšně:")
print(f"URL: {url}")
print(f"Platná do: {response['ResponseURLValidTill']}")
return url
else:
print("Chyba při generování URL:")
print(f"Kód: {response['ResponseCode']}")
print(f"Chyba: {response['ResponseErrorText']}")
return None
except Exception as e:
print(f"SOAP chyba: {str(e)}")
return None
if __name__ == '__main__':
url = generate_access_url(WSDL_AUTH_CODE, USER_ID, USER_EMAIL, MODULE_NAME)
if url:
print(f"\nMůžete otevřít URL v prohlížeči: {url}")
Instalace závislostí:
pip install zeep requests
Příklad 4: JavaScript (Node.js) s soap balíčkem
const soap = require('soap');
const he = require('he'); // HTML entity decoder
// Konfigurace
const WSDL_URL = 'https://vase-domena.eintranet.net/wsdl/eIAccess.php?wsdl';
const WSDL_AUTH_CODE = 'a1B2c3D4e5F6g7H8i9J0k1L2m3N4o5P6q7R8s9T0u1V2w3X4y5Z6a7B8c9D0e1F2g3H4';
// Parametry uživatele
const USER_ID = '42';
const USER_EMAIL = 'jan.novak@firma.cz';
const MODULE_NAME = 'wiki';
// Funkce pro generování URL
async function generateAccessUrl(wsdlAuthCode, userId, userEmail, moduleName) {
try {
// Vytvoření SOAP klienta
const client = await soap.createClientAsync(WSDL_URL, {
wsdl_options: {
rejectUnauthorized: true
}
});
// Parametry požadavku
const args = {
WSDLAuthCode: wsdlAuthCode,
UserID: userId,
UserEmail: userEmail,
ModuleName: moduleName
};
// Volání funkce
const [result] = await client.GenerateAccessUrlAsync(args);
const response = result.return;
// Kontrola odpovědi
if (response.ResponseCode === 1) {
// Dekódování HTML entit
const url = he.decode(response.ResponseURL);
console.log('URL vygenerována úspěšně:');
console.log('URL:', url);
console.log('Platná do:', response.ResponseURLValidTill);
return url;
} else {
console.error('Chyba při generování URL:');
console.error('Kód:', response.ResponseCode);
console.error('Chyba:', response.ResponseErrorText);
return null;
}
} catch (error) {
console.error('SOAP chyba:', error.message);
return null;
}
}
// Hlavní funkce
(async () => {
const url = await generateAccessUrl(
WSDL_AUTH_CODE,
USER_ID,
USER_EMAIL,
MODULE_NAME
);
if (url) {
console.log('\nMůžete otevřít URL v prohlížeči:', url);
}
})();
Instalace závislostí:
npm install soap he
Příklad 5: Java s JAX-WS
import javax.xml.namespace.QName;
import javax.xml.ws.Service;
import java.net.URL;
import java.util.Map;
import org.apache.commons.text.StringEscapeUtils;
public class EIntranetWSDLClient {
public static void main(String[] args) {
// Konfigurace
String wsdlUrl = "https://vase-domena.eintranet.net/wsdl/eIAccess.php?wsdl";
String wsdlAuthCode = "a1B2c3D4e5F6g7H8i9J0k1L2m3N4o5P6q7R8s9T0u1V2w3X4y5Z6a7B8c9D0e1F2g3H4";
// Parametry uživatele
String userId = "42";
String userEmail = "jan.novak@firma.cz";
String moduleName = "wiki";
try {
// Vytvoření service
URL url = new URL(wsdlUrl);
QName qname = new QName(
"https://vase-domena.eintranet.net/wsdl/eIAccess.php",
"eIAccessService"
);
Service service = Service.create(url, qname);
EIAccessPort port = service.getPort(EIAccessPort.class);
// Volání funkce
Map<String, Object> response = port.generateAccessUrl(
wsdlAuthCode,
userId,
userEmail,
moduleName
);
// Kontrola odpovědi
Integer responseCode = (Integer) response.get("ResponseCode");
if (responseCode == 1) {
// Dekódování HTML entit
String responseUrl = (String) response.get("ResponseURL");
String url = StringEscapeUtils.unescapeHtml4(responseUrl);
System.out.println("URL vygenerována úspěšně:");
System.out.println("URL: " + url);
System.out.println("Platná do: " + response.get("ResponseURLValidTill"));
} else {
System.out.println("Chyba při generování URL:");
System.out.println("Kód: " + responseCode);
System.out.println("Chyba: " + response.get("ResponseErrorText"));
}
} catch (Exception e) {
System.out.println("Chyba: " + e.getMessage());
e.printStackTrace();
}
}
}
FAQ - Často kladené otázky
Obecné otázky
Q: Lze použít WSDL službu bez přístupu k nastavení eIntranetu?
A: Ne, musíte mít administrátorská práva k modulu WSDL pro získání WSDLAuthCode. Bez tohoto kódu nemůžete službu používat.
Q: Může jeden WSDLAuthCode používat více externích aplikací?
A: Ano, WSDLAuthCode je společný pro všechny volající aplikace. Můžete jej použít z více systémů současně. Doporučujeme ale z bezpečnostních důvodů monitorovat, kdo a kdy jej používá.
Q: Kolik času trvá volání WSDL služby?
A: Kvůli bezpečnostní prodlevě trvá každé volání minimálně 2 sekundy. K tomu je nutné připočíst síťovou latenci a dobu zpracování.
Q: Lze změnit časový limit platnosti URL z 15 minut?
A: Ne, časový limit 15 minut je pevně zakódován v systému a nelze jej změnit bez úpravy zdrojového kódu.
Q: Mohu vygenerovat URL pro modul, který není aktivní?
A: Ne, služba vrátí chybu "Not existing ModuleName!" pokud modul není aktivní pro vaši společnost.
Technické otázky
Q: Proč dostávám URL s & místo &?
A: Některé SOAP knihovny automaticky kódují HTML entity. Před použitím URL je nutné dekódovat pomocí příslušné funkce (html_entity_decode, HtmlDecode, html.unescape, atd.).
Q: Podporuje služba SOAP 1.1?
A: Služba je primárně navržena pro SOAP 1.2. SOAP 1.1 může fungovat, ale není garantováno.
Q: Mohu volat službu z frontendu (JavaScriptu v prohlížeči)?
A: Z bezpečnostních důvodů to není doporučeno, protože byste museli exponovat WSDLAuthCode do klientského kódu. Vždy volejte službu ze serveru.
Q: Funguje služba s WSDL cache?
A: Ano, ale při změnách je nutné cache invalidovat. Doporučujeme pro vývoj cache vypnout.
Q: Lze použít službu pro API integraci (bez uživatelského rozhraní)?
A: eIAccess služba je primárně pro SSO a přesměrování uživatelů. Pro API integraci použijte REST API eIntranetu (/RestAPI/).
Bezpečnostní otázky
Q: Co se stane, pokud někdo zjistí můj WSDLAuthCode?
A: Útočník bude moci generovat přístupové URL pro libovolného uživatele. Okamžitě kontaktujte administrátora a nechte vygenerovat nový kód.
Q: Je bezpečné posílat vygenerovanou URL emailem?
A: URL je platná pouze 15 minut a je šifrovaná, takže pro krátkodobé použití je bezpečná. Pro dlouhodobější odkazy raději použijte standardní přihlášení.
Q: Loguje se použití WSDL služby?
A: Ano, každé přihlášení přes WSDL je zaznamenáno v User_login tabulce včetně IP adresy a času.
Q: Může uživatel použít URL vícekrát?
A: Ano, v rámci 15 minut platnosti. Po prvním použití je ale uživatel přihlášen přes standardní session, takže opakované použití URL není nutné.
Q: Je nutné používat HTTPS?
A: Pro produkční prostředí je HTTPS absolutně povinné. HTTP lze používat pouze v izolovaném vývojovém prostředí.
Uživatelské otázky
Q: Co se stane, když uživatel nemá práva k modulu?
A: URL se vygeneruje úspěšně, ale po přihlášení uživatel uvidí chybovou hlášku "Nedostatečná oprávnění".
Q: Může uživatel po přihlášení přes WSDL přistupovat i k jiným modulům?
A: Ano, po přihlášení má uživatel standardní session a může přistupovat ke všem modulům, ke kterým má práva.
Q: Jak dlouho zůstane uživatel přihlášen po použití WSDL URL?
A: Session funguje standardně - obvykle 30 minut neaktivity nebo do explicitního odhlášení.
Q: Mohu vygenerovat URL pro uživatele, který ještě není v systému?
A: Ne, uživatel musí být nejprve naimportován v Nastavení > Uživatelé.
Řešení problémů
Chyba: "Bad WSDLAuthCode!"
Příčina: Nesprávný nebo chybějící WSDLAuthCode v požadavku.
Řešení:
- Ověřte, že WSDLAuthCode je správně zkopírován z nastavení WSDL (přesně 66 znaků)
- Zkontrolujte, že v kódu nejsou přebytečné mezery nebo nové řádky
- Ujistěte se, že používáte WSDLAuthCode pro správnou společnost (pokud máte více instancí)
- Zkuste WSDLAuthCode vypsat do logu a porovnat s hodnotou v nastavení
Chyba: "Bad UserID!"
Příčina: UserID není platné číslo.
Řešení:
- Ověřte, že UserID obsahuje pouze číslice (např. "42", nikoliv "user42")
- Zkontrolujte, že UserID není prázdné
- Ujistěte se, že do parametru UserID neposíláte email nebo uživatelské jméno
- Získejte správné UserID z administrace uživatelů v eIntranetu
Chyba: "Bad UserEmail!"
Příčina: Email není ve validním formátu nebo má nesprávnou délku.
Řešení:
- Ověřte, že email je ve formátu uzivatel@domena.cz
- Zkontrolujte délku emailu (musí být 4-80 znaků)
- Ujistěte se, že email neobsahuje mezery nebo speciální znaky na začátku/konci
- Validujte email před odesláním pomocí regex nebo validační funkce
Chyba: "Not existing ModuleName!"
Příčina: Modul neexistuje nebo není aktivní pro vaši společnost.
Řešení:
- Zkontrolujte seznam dostupných modulů v nastavení WSDL (záložka eIAccess)
- Ověřte, že používáte správný interní název modulu (např. "wiki", nikoliv "Wiki")
- Ujistěte se, že modul je aktivován pro vaši společnost v Nastavení > Moduly
- Kontaktujte administrátora pro aktivaci potřebného modulu
Chyba: "Not existing User!"
Příčina: Kombinace UserID a UserEmail neodpovídá žádnému uživateli v databázi.
Řešení:
- Ověřte, že UserID a UserEmail patří stejnému uživateli
- Zkontrolujte v administraci uživatelů, jaký email má uživatel s daným ID
- Ujistěte se, že email je přesně stejný včetně velikosti písmen (i když systém by měl být case-insensitive)
- Zkontrolujte, že uživatel není smazán nebo deaktivován
Problém: URL obsahuje & místo &
Příčina: SOAP knihovna automaticky kóduje HTML entity.
Řešení:
Dekódujte ResponseURL před použitím:
- PHP:
html_entity_decode($url, ENT_QUOTES | ENT_HTML401, 'UTF-8') - C#:
System.Net.WebUtility.HtmlDecode(url) - Python:
html.unescape(url) - JavaScript: Použijte knihovnu
henebo vlastní funkci
Problém: SOAP chyba "Could not connect to host"
Příčina: Nelze navázat spojení se SOAP službou.
Řešení:
- Ověřte, že URL je správná a dostupná (zkuste otevřít v prohlížeči)
- Zkontrolujte firewall a síťové nastavení
- Ujistěte se, že server má přístup k internetu (pokud je eIntranet na externí doméně)
- Ověřte SSL certifikát (pro HTTPS) - může být nutné jej importovat nebo vypnout verifikaci pro testování
- Zkontrolujte, že služba eIAccess běží (může být deaktivována administrátorem)
Problém: Po kliknutí na URL se uživatel nepřihlásí
Možné příčiny a řešení:
1. URL expirovala (15 minut)
- Řešení: Vygenerujte novou URL těsně před použitím
2. Modul WSDL není aktivován pro společnost
- Řešení: Aktivujte modul v Nastavení > Moduly
3. AuthToken je poškozený
- Řešení: Zkontrolujte, že URL nebyla změněna (např. emailovým klientem)
- Ujistěte se, že jsou správně dekódované HTML entity
4. Cookies jsou zakázány
- Řešení: Uživatel musí mít povolené cookies pro správnou funkci session
5. Konflikt session
- Řešení: Zkuste otevřít URL v anonymním/inkognito okně prohlížeče
Problém: WSDL cache způsobuje problémy
Příčina: SOAP knihovna používá cachovanou verzi WSDL, která je zastaralá.
Řešení:
PHP:
$client = new SoapClient($wsdlUrl, [
'cache_wsdl' => WSDL_CACHE_NONE
]);
Python (zeep):
from zeep.cache import SqliteCache
cache = SqliteCache(timeout=0) # Vypnout cache
client = Client(wsdl_url, transport=Transport(cache=cache))
.NET:
Smažte soubory v C:\Users\[username]\AppData\Local\Temp s názvem obsahujícím "WSDL"
Problém: Pomalá odezva služby
Příčina: 2sekundová bezpečnostní prodleva nebo pomalé síťové spojení.
Řešení:
- 2sekundová prodleva je úmyslná a nelze ji vypnout - počítejte s ní v návrhu aplikace
- Optimalizujte síťové spojení (použijte CDN, lokální server)
- Implementujte asynchronní volání, aby blokovalo uživatelské rozhraní
- Zvažte cachování UserID a emailů pro snížení počtu volání
Problém: SSL/TLS certifikát nelze ověřit
Příčina: Self-signed certifikát nebo chybějící certifikát v trust store.
Řešení pro vývoj (NIKDY pro produkci):
PHP:
$client = new SoapClient($wsdlUrl, [
'stream_context' => stream_context_create([
'ssl' => [
'verify_peer' => false,
'verify_peer_name' => false
]
])
]);
Python:
session = Session()
session.verify = False # Vypnout SSL verifikaci
transport = Transport(session=session)
Řešení pro produkci:
- Nainstalujte platný SSL certifikát od důvěryhodné CA
- Nebo importujte self-signed certifikát do system trust store
- Ověřte, že certifikát není expirovaný
Technické specifikace
SOAP Verze a standardy
- SOAP verze: 1.2 (preferovaná), kompatibilita s 1.1
- WSDL verze: 1.1
- XML Schema: XSD 1.0
- Transport: HTTP/HTTPS (HTTPS povinné pro produkci)
- Kódování zpráv: SOAP Encoding (http://schemas.xmlsoap.org/soap/encoding/)
- Styl zprávy: RPC (Remote Procedure Call)
- Charset: UTF-8
Endpointy
WSDL URL:
https://[vase-domena].eintranet.net/wsdl/eIAccess.php?wsdl
SOAP Endpoint:
https://[vase-domena].eintranet.net/wsdl/eIAccess.php
Namespace:
https://[vase-domena].eintranet.net/wsdl/eIAccess.php
HTTP Hlavičky
Požadavek:
- Content-Type: text/xml; charset=utf-8
- SOAPAction: "https://[vase-domena].eintranet.net/wsdl/eIAccess.php#GenerateAccessUrl" (nepovinné)
- Content-Length: [délka XML požadavku]
Odpověď:
- Content-Type: text/xml; charset=utf-8
- Content-Length: [délka XML odpovědi]
Datové typy
Vstupní parametry:
- WSDLAuthCode: xsd:string (66 znaků, alfanumerické)
- UserID: xsd:string (číselné)
- UserEmail: xsd:string (4-80 znaků, validní email formát)
- ModuleName: xsd:string (malá písmena, bez mezer)
Návratové hodnoty:
- ResponseCode: xsd:int (0 nebo 1)
- ResponseErrorText: xsd:string (prázdný nebo chybová hláška)
- ResponseURL: xsd:string (prázdný nebo validní URL)
- ResponseURLValidTill: xsd:string (prázdný nebo ISO 8601 datetime)
Šifrování a bezpečnost
AuthToken šifrování:
- Algoritmus: AES-256-CBC
- Klíč: Odvozený od tajného saltu
- IV (Initialization Vector): "1234567890123456" (16 bytů)
- Kódování: Base64 URL-safe (znaky +/= nahrazeny za ._-)
- Dodatečná ochrana: Náhodné číslo 4 číslice na začátku, 5 číslic na konci
WSDLAuthCode generování:
- Délka: 66 znaků
- Znaky: Alfanumerické (a-z, A-Z, 0-9) + speciální (-, _, .)
- Generátor: Funkce generatePassword() s parametrem PossibleVariant=1
- Ukládání: Plaintext v databázové tabulce Company
Limity a omezení
- Časový limit URL: 15 minut od vygenerování
- Prodleva volání: 2 sekundy na každé volání (anti-brute-force)
- Maximální délka emailu: 80 znaků
- Minimální délka emailu: 4 znaky
- Délka WSDLAuthCode: Přesně 66 znaků
- Počet volání: Neomezeno (ale sledováno)
- Velikost SOAP zprávy: Standardní HTTP limity (obvykle 1-10 MB)
Závislosti a požadavky
Server-side (eIntranet):
- PHP: 8.2 nebo vyšší
- PHP rozšíření: soap, openssl, pdo_mysql
- Database: MySQL 5.7+ nebo MariaDB 10.3+
- Web server: Apache 2.4+ nebo Nginx 1.18+
- HTTPS: Platný SSL/TLS certifikát (produkce)
Client-side:
- SOAP knihovna: Jakákoli knihovna podporující SOAP 1.2 RPC/Encoded
- HTTP client: Podpora HTTPS s TLS 1.2+
- XML parser: Pro zpracování SOAP odpovědí
Kompatibilita
Testováno s:
- PHP SoapClient (7.4, 8.0, 8.1, 8.2)
- .NET Framework 4.6+, .NET Core 3.1+, .NET 5+
- Python zeep 4.0+
- Node.js soap 0.40+
- Java JAX-WS (Java 8+)
Známé problémy:
- Některé starší SOAP knihovny mohou mít problémy s SOAP 1.2 - použijte aktuální verze
- HTML entity v ResponseURL - vyžaduje dekódování na straně klienta
- Self-signed SSL certifikáty vyžadují speciální konfiguraci klientů
Monitoring a logování
Logované události:
- Úspěšné přihlášení (tabulka User_login)
- IP adresa volajícího (last_login_ip)
- Timestamp přihlášení
- DNS jméno IP adresy
- Device type ("Computer/Browser")
Nelogované události:
- Neúspěšná volání WSDL (chybný WSDLAuthCode, atd.)
- SOAP chyby na úrovni protokolu
- Expirace URL (po 15 minutách)
Doporučení pro monitoring:
- Implementujte vlastní logování na straně klienta
- Monitorujte ResponseCode=0 pro detekci problémů
- Sledujte frekvenci volání pro detekci abuse
- Pravidelně kontrolujte User_login tabulku
Kontakt a podpora
Pro technickou podporu a dotazy ohledně modulu WSDL kontaktujte:
- Technická podpora eIntranet: support@eintranet.net
- Dokumentace online: https://www.eintranet.net/dokumentace
- Telefonní podpora: +420 XXX XXX XXX
Při hlášení problému uveďte:
- Přesný text chybové hlášky
- Použitý programovací jazyk a SOAP knihovnu včetně verze
- SOAP požadavek a odpověď (bez WSDLAuthCode!)
- Časové razítko, kdy k chybě došlo
- Kroky k reprodukci problému
Dokumentace vygenerována pro modul WSDL (ID: 54), verze eIntranet 2024