Diskuze: úprava soap správy cez BeforeSendRequest
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.


Zobrazeno 6 zpráv z 6.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.


akosi sa mi vytratil ešte zvyšok textu vínimky takže:
The request message must be protected. This is required by an operation of the contract ('NazovSluzbyContract','http://nejakywebovyOdkaz'). The protection must be provided by the binding ('CustomBinding','http://tempuri.org/').
WCF stub, který jsi pro službu vygeneroval, má na contractu specifikováno, že zpráva musí být encrypted nebo signed. Přesně tohle se říká v té výjimce, kterou jsi poslal:
The request message must be protected. This is required by an operation of the contract
protected = encrypted
required by operation = je tam atribut vyžadující encryption/signature
Tvoje zkušební služba, u které to funguje, dost pravděpodobně nic takového nevyžaduje, ale bude také nejspíš ignorovat příchozí podpisy.
WS-Signature bys měl nechat na WCF frameworku, není to nic jednoduchého to napsat správně. Jedinou výjimkou je, pokud službu nabízí jiná strana a má chybně implementovanou WS-Security specifikaci (například JSpring je špatně).
Ideálně přestaň dělat podpisy ručně a v konfiguraci nastav wsHttpBinding. Na WCF stubu služby použij signed/not-encrypted atribut a nemusíš se o nic starat.
Vďaka za odpoveď,
takže skusmo som nahradil customBinding za wsHttpBinding a už ma pekne hodí
do BeforeSendRequest, lenže podľa tvojho príspevku by som to nemál riešiť
ručne tak by som chcel dať na tvoju radu. Som v tom WS-Signature trochu mimo,
už to dlhšie lúskam no stále mám v tom guláš.
Chcem sa teda spýtať:
1.môžem nahradiť ten customBinding za wsHttpBinding, napriek tomu, že
customBinding bol vygenerovaný cez wdsl?
2.Prosím ťa taká lamerska otázka ako resp. kde mám použiť ten
signed/not-encrypted atribút
3.Myslíš teda, že to automaticky všetko správne podpíše a bude stačiť
len nastaviť certifikát do credentials alebo ako bude vedieť čím to má
podpísať a čo všetko sa má podpísať. Tieto všetky veci by mali byť
podpísané:
Protože nevím, jak vypadá WSDL ani Policy, tak na většinu otázek nedokážu takhle odpovědět.
Tvůj problém primárně spočívá v tom, že na vygenerovaném interfacu pro WCF službu máš použitý jeden z těchto atributů:
[ServiceContract(ProtectionLevel = ProtectionLevel.Sign)]
[OperationContract(ProtectionLevel = ProtectionLevel.Sign)]
Pokud je smažeš, už by ti měl ten aktuální klient fungovat s customBindingem.
Na to, aby se automaticky podepsaly headers v SOAP zprávě musíš použít MessageContracty, příklad:
[System.ServiceModel.MessageContract()]
public partial class requestZadost
{
[System.ServiceModel.MessageHeader(ProtectionLevel = System.Net.Security.ProtectionLevel.EncryptAndSign)]
public UserTokenHeader userToken;
[System.ServiceModel.MessageBodyMember(Name="request", Namespace="http://foo.com/", ProtectionLevel = System.Net.Security.ProtectionLevel.Sign)]
public requestType requestBody;
}
UserToken bude podepsaný a šifrovaný, ale Body bude jen podepsané. Pokud je v konfiguraci nastavená wsHttpBinding, udělá WCF všechno samo.
A teď k dalšímu problému - customBinding generuje WCF v případě, že na straně služby je něco "jinak". Takže s velice vysokou pravděpodobností tomu WCF nerozumí a snaží se z toho zotavit nejlépe, jak to jde (a většinou mu to nejde).
Takže to chce projít celou konfiguraci a zkontrolovat, jestli je všechno v pořádku a sedí to. wsBinding by měl udělat to, co chceš sám.
Další varianta je nastavit pouze httpBinding, smazat atributy ProtectionLevel z interfacu služby a udělat signatury přes interceptory, jak to děláš. Ale musíš být velice opatrný s XML, protože se podepisuje byte[]. XML musí být normalizované a nesmí se s ním hýbat. Také musíš dodat X509 certifikáty a vložit je buď do zprávy nebo je ve zprávě identifikovat přes reference podle požadavků služby.
Jak říkám, dělat tohle ručně není snadná záležitost. Pokud je služba od někoho jiného, pak bych je požádal o součinnost a zeptal se, jestli mají ověřenou kompatibilitu se C# a WCF.
OK, vyzerá to tak, že budem musieť asi skúsim požiadať o pomoc zo strany služby. Zatiaľ ti veľmi pekne ďakujem za objasnenie.
Zobrazeno 6 zpráv z 6.