Wiki - eIntranet.net

Deutsch flag Čeština flag English flag Español flag Slovenčina flag Magyar flag Polski flag

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.

  1. Přihlaste se do eIntranetu jako administrátor
  2. Přejděte do Nastavení > Moduly
  3. Vyhledejte modul WSDL (SOAP Web Services)
  4. Aktivujte modul zaškrtnutím políčka
  5. Uložte změny

Přístup k nastavení WSDL

Po aktivaci modulu získáte přístup k nastavení WSDL:

  1. V hlavním menu přejděte do Nastavení
  2. V levém menu klikněte na WSDL (SOAP)
  3. 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:

  1. Otevřete Nastavení > WSDL (SOAP)
  2. Přejděte na záložku Obecné nastavení
  3. V sekci "Společné nastavení pro všechna WSDL" najdete řádek WSDLAuthCode:
  4. Za dvojtečkou je zobrazen váš 66-znakový autentizační kód
  5. 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é:

  1. Kontaktovat správce systému nebo databázového administrátora
  2. Požádat o vymazání aktuálního WSDLAuthCode z databázové tabulky Company
  3. Po vymazání se při dalším zobrazení stránky nastavení WSDL automaticky vygeneruje nový kód
  4. 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:eiac musí 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&amp;idUser=42&amp;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 &amp; místo znaku &.

Příklad problematické URL:

https://demo.eintranet.net?modul=wiki&amp;idUser=42&amp;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:

  1. Přejděte do Nastavení > WSDL (SOAP)
  2. Otevřete záložku eIAccess
  3. 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:

  1. Přejděte do Nastavení > Uživatelé
  2. Klikněte na Přidat nového uživatele
  3. 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é
  4. Uložte uživatele
  5. Poznamenejte si idUser (ID uživatele) - tuto hodnotu budete potřebovat pro volání WSDL

Získání UserID existujícího uživatele:

  1. Přejděte do Nastavení > Uživatelé
  2. Vyhledejte požadovaného uživatele
  3. Klikněte na jméno uživatele pro zobrazení detailu
  4. V URL adrese najdete parametr idUser=CISLO - toto číslo je UserID
  5. 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:

  1. Otevřete detail uživatele v Nastavení > Uživatelé
  2. Přejděte na záložku Práva
  3. 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í)
  4. 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í:

  1. SharePoint má synchronizovaný seznam uživatelů s eIntranetem (včetně UserID a emailů)
  2. Na SharePoint stránce je tlačítko "Má docházka"
  3. 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
  4. 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í:

  1. Mobilní aplikace má vlastní přihlašovací systém
  2. Po přihlášení uživatel klikne na "Schválit dovolené"
  3. Aplikace zavolá WSDL službu s parametry uživatele a modulem "dovolena"
  4. Získá URL a otevře ji v webview (vestavěný prohlížeč)
  5. Uživatel vidí rozhraní pro schvalování dovolených z eIntranetu
  6. 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í:

  1. Při vytvoření žádosti se spustí cron job nebo background proces
  2. Proces zavolá WSDL službu s parametry nadřízeného a modulem "dovolena"
  3. Do emailu vloží vygenerovanou URL s přidaným parametrem pro konkrétní žádost
  4. Nadřízený klikne na odkaz v emailu
  5. 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í:

  1. V ERP systému je stránka "Detail zákazníka"
  2. Na této stránce je iframe pro zobrazení faktur zákazníka z eIntranetu
  3. Při načtení stránky se zavolá WSDL služba s parametry aktuálního uživatele ERP a modulem "faktury_vydane"
  4. Iframe načte vygenerovanou URL s filtrem na konkrétního zákazníka
  5. 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í:

  1. Uživatel se přihlásí do centrálního systému
  2. 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
  3. Uživatel se automaticky přihlásí v eIntranetu
  4. 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 &amp; 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í:

  1. Ověřte, že WSDLAuthCode je správně zkopírován z nastavení WSDL (přesně 66 znaků)
  2. Zkontrolujte, že v kódu nejsou přebytečné mezery nebo nové řádky
  3. Ujistěte se, že používáte WSDLAuthCode pro správnou společnost (pokud máte více instancí)
  4. Zkuste WSDLAuthCode vypsat do logu a porovnat s hodnotou v nastavení

Chyba: "Bad UserID!"

Příčina: UserID není platné číslo.

Řešení:

  1. Ověřte, že UserID obsahuje pouze číslice (např. "42", nikoliv "user42")
  2. Zkontrolujte, že UserID není prázdné
  3. Ujistěte se, že do parametru UserID neposíláte email nebo uživatelské jméno
  4. 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í:

  1. Ověřte, že email je ve formátu uzivatel@domena.cz
  2. Zkontrolujte délku emailu (musí být 4-80 znaků)
  3. Ujistěte se, že email neobsahuje mezery nebo speciální znaky na začátku/konci
  4. 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í:

  1. Zkontrolujte seznam dostupných modulů v nastavení WSDL (záložka eIAccess)
  2. Ověřte, že používáte správný interní název modulu (např. "wiki", nikoliv "Wiki")
  3. Ujistěte se, že modul je aktivován pro vaši společnost v Nastavení > Moduly
  4. 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í:

  1. Ověřte, že UserID a UserEmail patří stejnému uživateli
  2. Zkontrolujte v administraci uživatelů, jaký email má uživatel s daným ID
  3. 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)
  4. Zkontrolujte, že uživatel není smazán nebo deaktivován

Problém: URL obsahuje &amp; 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 he nebo vlastní funkci

Problém: SOAP chyba "Could not connect to host"

Příčina: Nelze navázat spojení se SOAP službou.

Řešení:

  1. Ověřte, že URL je správná a dostupná (zkuste otevřít v prohlížeči)
  2. Zkontrolujte firewall a síťové nastavení
  3. Ujistěte se, že server má přístup k internetu (pokud je eIntranet na externí doméně)
  4. Ověřte SSL certifikát (pro HTTPS) - může být nutné jej importovat nebo vypnout verifikaci pro testování
  5. 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í:

  1. 2sekundová prodleva je úmyslná a nelze ji vypnout - počítejte s ní v návrhu aplikace
  2. Optimalizujte síťové spojení (použijte CDN, lokální server)
  3. Implementujte asynchronní volání, aby blokovalo uživatelské rozhraní
  4. 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:

  1. Nainstalujte platný SSL certifikát od důvěryhodné CA
  2. Nebo importujte self-signed certifikát do system trust store
  3. 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