Webes alkalmazások fejlesztése 14. fejezet. Szolgáltatások adatkezelése (WCF) Giachetta Roberto. Eötvös Loránd Tudományegyetem Informatikai Kar

Hasonló dokumentumok
Webes alkalmazások fejlesztése 12. fejezet. Szolgáltatás alapú kommunikáció (WCF) Giachetta Roberto. Eötvös Loránd Tudományegyetem Informatikai Kar

Webes alkalmazások fejlesztése 7. előadás. Autentikáció és autorizáció (ASP.NET Core) Cserép Máté

Webes alkalmazások fejlesztése 7. előadás. Autentikáció és autorizáció (ASP.NET)

Webes alkalmazások fejlesztése 4. előadás. Megjelenítés és tartalomkezelés (ASP.NET Core) Cserép Máté

Webes alkalmazások fejlesztése 9. előadás. Webszolgáltatások felhasználása (ASP.NET WebAPI)

Webes alkalmazások fejlesztése 1. előadás. Webes alkalmazások és biztonságuk

Webes alkalmazások fejlesztése 6. előadás. Állapotfenntartás (ASP.NET) 2015 Giachetta Roberto

Webes alkalmazások fejlesztése 4. előadás. Megjelenítés és tartalomkezelés (ASP.NET)

Webes alkalmazások fejlesztése 4. előadás. Megjelenítés és tartalomkezelés (ASP.NET) Cserép Máté.

Webes alkalmazások fejlesztése 9. előadás. Webszolgáltatások felhasználása (ASP.NET Core &.NET Framework)

Webes alkalmazások fejlesztése 6. előadás. Állapotfenntartás (ASP.NET) Cserép Máté.

Webes alkalmazások fejlesztése 6. előadás. Állapotfenntartás (ASP.NET) Állapotfenntartás. Állapotfenntartás. Állapotfenntartás.

Webes alkalmazások fejlesztése 6. előadás. Állapotfenntartás (ASP.NET) 2015 Giachetta Roberto

Hálózatbiztonság Androidon. Tamas Balogh Tech AutSoft

Titkosítás NetWare környezetben

Webes alkalmazások fejlesztése 1. előadás. Webes alkalmazások és biztonságuk. Cserép Máté

Szerializáció. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) Szerializáció / 22

Webes alkalmazások fejlesztése 10. előadás. Webszolgáltatások tesztelése (ASP.NET Core) Cserép Máté

Webes alkalmazások fejlesztése 3. előadás. Objektumrelációs adatkezelés (ASP.NET)

IP alapú távközlés. Virtuális magánhálózatok (VPN)

Webes alkalmazások fejlesztése 6. előadás. Állapotfenntartás (ASP.NET Core) Cserép Máté

Simon Balázs Dr. Goldschmidt Balázs Dr. Kondorosi Károly. BME, Irányítástechnika és Informatika Tanszék

S, mint secure. Nagy Attila Gábor Wildom Kft.

Symfony kurzus 2014/2015 I. félév. Security: authentication, authorization, user provider, role-ok, access control, FOS user bundle

Biztonságos mobilalkalmazás-fejlesztés a gyakorlatban. A CryptTalk fejlesztése során alkalmazott módszerek. Dr. Barabás Péter Arenim Technologies

Eseményvezérelt alkalmazások fejlesztése II 12. előadás. Objektumrelációs adatkezelés (ADO.NET) Giachetta Roberto

Beállítások 1. Töltse be a Planet_NET.pkt állományt a szimulációs programba! A teszthálózat már tartalmazza a vállalat

Tanúsítványok kezelése az ibahir rendszerben

API tervezése mobil környezetbe. gyakorlat

Bejelentkezés az egyetemi hálózatba és a számítógépre

Megjegyzés vezeték nélküli LAN felhasználóknak

OOP #14 (referencia-elv)

A gyakorlat során az alábbi ábrán látható négy entitáshoz kapcsolódó adatbevitelt fogjuk megoldani.

Adatkezelési nyilatkozat

Webes alkalmazások fejlesztése 8. előadás. Webszolgáltatások megvalósítása (ASP.NET WebAPI)

Előnyei. Helyi hálózatok tervezése és üzemeltetése 2

5.1 Környezet Hálózati topológia

Models are not right or wrong; they are more or less useful.

OOP és UML Áttekintés

Levelezési beállítások

Hálózatkezelés. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) Hálózatkezelés / 20

Vodafone-os beállítások Android operációs rendszer esetében

Vizuális és eseményvezérelt programozás , II. félév BMF NIK

Webes alkalmazások fejlesztése 10. előadás. Szolgáltatás alapú rendszerek megvalósítása (ASP.NET WebAPI) Cserép Máté

Rendszergazda Debrecenben

Kezdő lépések Microsoft Outlook

Nokia N97_mini (Mail for Exchange) beállítása Virtualoso levelezésre

Webes alkalmazások fejlesztése 2. előadás. Webfejlesztés MVC architektúrában (ASP.NET) Webfejlesztés MVC architektúrában Fejlesztés ASP.

WIN-TAX programrendszer hálózatban

Adott egy szervezet, és annak ügyfelei. Nevezzük a szervezetet bank -nak. Az ügyfelek az Interneten keresztül érzékeny információkat, utasításokat

ContractTray program Leírás

A NÉGY BŰVÖS HÁRMAS WWW FTP SQL PHP. BRKK::Békéscsaba Linux rendszergazda képzés 2008

Számítógépes Hálózatok. 5. gyakorlat

C# Nyelvi Elemei. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) C# Nyelvi Elemei / 18

G Data MasterAdmin 9 0 _ 09 _ _ # r_ e p a P ch e T 1

Adatkezelési nyilatkozat, szabályzat

Eseményvezérelt alkalmazások fejlesztése II 5. előadás. Windows Forms alkalmazások párhuzamosítása. Giachetta Roberto

Általános fiók beállítási útmutató

1. Mi a fejállományok szerepe C és C++ nyelvben és hogyan használjuk őket? 2. Milyen alapvető változókat használhatunk a C és C++ nyelvben?

Windows biztonsági problémák

IP alapú kommunikáció. 11. Előadás Hálózat Monitoring/Hálózat Manadgement Kovács Ákos

és az instanceof operátor

Vectory telepítési útmutató

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán

SZÓBELI ÉRETTSÉGI TÉMAKÖRÖK

E mail titkosítás az üzleti életben ma már követelmény! Ön szerint ki tudja elolvasni bizalmas leveleinket?

CREATE TABLE student ( id int NOT NULL GENERATED ALWAYS AS IDENTITY PRIMARY KEY, name varchar(100) NOT NULL, address varchar(100) NOT NULL )

1.2. NFS kliens telepítése és beállítása

Objektum Orientált Programozás. 11. Kivételkezelés 44/1B IT MAN

Használati útmutató a Székács Elemér Szakközépiskola WLAN hálózatához

Számítógépes alapismeretek 2.

Gyakorlati vizsgatevékenység A

Biztonság a glite-ban

Oralce kliens installálása Windows Server 2003-ra

Teljes körű weboldal, API és DDoS védelmi szolgáltatás

Java. Perzisztencia. ANTAL Margit. Java Persistence API. Object Relational Mapping. Perzisztencia. Entity components. ANTAL Margit.

Adatbázisok elleni fenyegetések rendszerezése. Fleiner Rita BMF/NIK Robothadviselés 2009

Bevezető. Servlet alapgondolatok

TELJESÍTÉNYMÉRÉS FELHŐ ALAPÚ KÖRNYEZETBEN AZURE CLOUD ANALÍZIS

EDUROAM WI-FI beállítása

Széchenyi István Egyetem. Programozás III. Varjasi Norbert

Android Wear programozás. Nyitrai István

Metadata specifikáció

ÜGYFÉL OLDALI BEÁLLÍTÁSOK KÉZIKÖNYVE

Új Magyarország Fejlesztési Terv Tájékoztató A ZMNE-n bevezetett wifi szolgáltatásról KMOP-4.2.1/B

Elektronikus levelek. Az informatikai biztonság alapjai II.

FELHASZNÁLÓI KÉZIKÖNYV. WF-2322 Vezetéknélküli Hozzéférési Pont

Adatbázis kezelő szoftverek biztonsága. Vasi Sándor G-3S

Gyakorlati vizsgatevékenység

Sorosítás (szerializáció) és helyreállítás. 1. Bináris sorosítás és helyreállítás Szükséges névterek Attribútumok. 1.3.

Levelező kliensek beállítása

Elosztott rendszerek. Az elıadás. Az elosztott rendszer definíciója. Köztesrétegként felépülı elosztott rendszer

Testnevelési Egyetem VPN beállítása és használata

Tanúsítványkérelem készítése, tanúsítvány telepítése Microsoft Internet Information szerveren

DebitTray program Leírás

Windows 7. Szolgáltatás aktiválása

A JGrid rendszer biztonsági architektúrája. Magyaródi Márk Juhász Zoltán Veszprémi Egyetem

Java Programozás 4. Gy: Java GUI. Tipper, MVC kalkulátor

Technikai tudnivalók a Saxo Trader Letöltéséhez tűzfalon vagy proxy szerveren keresztül

Átírás:

Eötvös Loránd Tudományegyetem Informatikai Kar Webes alkalmazások fejlesztése 14. fejezet Szolgáltatások adatkezelése (WCF) Giachetta Roberto A jegyzet az ELTE Informatikai Karának 2016. évi jegyzetpályázatának támogatásával készült

Adatmennyiség Adatszolgáltatók kérésenként tetszőleges mennyiségű adatot fogadhatnak/küldhetnek a konfiguráció határozza meg az adatmennyiség felső korlátait, amik alapértelmezetten kis mennyiségek (a szerver leterheltségének és a túlterheléses támadások korlátozására) az adatmennyiség különböző szinteken szabályozott: webszerver (maximális kérés mérete HTTP alapú adatközlésnél), üzenet (teljes üzenet hossza), illetve tartalom (egy bejegyzés/érték hossza) a korlátozás szerver és kliens oldalon is definiált ELTE IK, Webes alkalmazások fejlesztése 14:2

Adatmennyiség A maximális adatmennyiséget számos módon szabályozhatjuk a konfigurációban, pl.: fogadható kérés mérete (szerver): HttpRuntime.MaxRequestLength fogadható üzenet mérete (szerver és kliens): Binding.MaxReceivedMessageSize fogadható bináris adatmennyiség értékenként (szerver és kliens): Binding.ReaderQuotas.MaxArrayLength fogadható szöveges adatmennyiség értékenként (szerver és kliens): Binding.ReaderQuotas.MaxStringContentLength ELTE IK, Webes alkalmazások fejlesztése 14:3

Adatkommunikáció módja Az adatkommunikáció többféle módon bonyolítható le (Binding.TransferMode): csomag alapon (Buffered): az adatokat puffer tömbökbe gyűjti, és együttesen továbbítja (alapértelmezett) ekkor a puffer méretét is szabályozhatjuk (Binding.MaxBufferSize) folyam alapon (Streamed): az adatokat kisebb darabokban, folyamatosan továbbítja vegyes (StreamedRequest, StreamedResponse) Nagyobb adatmennyiségnél célszerű folyam alapú kommunikációt használni ELTE IK, Webes alkalmazások fejlesztése 14:4

Adatmennyiség Pl.: <basichttpbinding> <binding transfermode="streamed" maxreceivedmessagesize="268435456"> <!-- az adatközlés adatfolyam alapú --> <readerquotas maxdepth="32" maxstringcontentlength="8192" maxarraylength="268435456" maxbytesperread="4096" maxnametablecharcount="16384" /> <!-- átállítjuk a maximum üzenet és tömb méretet a nagyobb adattartalomhoz --> ELTE IK, Webes alkalmazások fejlesztése 14:5

Példa Feladat: Készítsünk egy adminisztrációs alkalmazást az utazási ügynökség számára, ahol az egyes kiadó épületekhez tartozó képeket tudják kezelni. az adatokat adatbázisban (TravelAgency) tároljuk, beleértve a képeket (byte-tömb formában), amelyekből két méretet (kisebb, nagyobb) tárolunk el és használunk fel a későbbiekben egy épülethez több kép is tartozhat, így külön táblába helyezzük (BuildingImage) az adatbázist entitásmodellel építjük fel a szerveren, amely továbbítja az entitásokat a kliensnek (amelyek automatikusan adatszerződések lesznek) ELTE IK, Webes alkalmazások fejlesztése 14:6

Példa a felhasználót (Operator) név/jelszó alapján azonosítjuk megemeljük kellőképpen az adatmennyiség korlátokat és használjuk folyam alapú kommunikációt kliens oldalon a képet töltsük be (BitmapImage), alakítsuk át PNG formátumra és méretezzük át (PngBitmapEncoder), majd töltsük át byte-tömbbe a tároláshoz (VARBINARY formátumban) és továbbításhoz a továbbítást azonnal elvégezzük, majd frissítjük az adatokat a szerverről a megjelenítéshez megfelelő átalakító kell (BuildingImageConverter), amely a byte-tömböt képpé alakítja ELTE IK, Webes alkalmazások fejlesztése 14:7

Példa Tervezés (adatbázis): ELTE IK, Webes alkalmazások fejlesztése 14:8

Példa Tervezés (kliens és szerver): ViewModelBase ViewModel::TravelAgencyViewModel - _client :RentalServiceClient - _isloggedin :Boolean + TravelAgencyViewModel() - Application_Exit(object, ExitEventArgs) :void - LoginExecuted() :void - LogoutExecuted() :void - AddBuildingImageExecuted(Building) :void - RemoveBuildingImageExecuted(BuildingImage) :void - OnLoginFailed() :void - OnLoginSuccess() :void - GetSizedImageBytes(String, Int32) :Byte[] «property» + StatusMessage() :String + UserName() :String + UserPassword() :String + Buildings() :ObservableCollection<Building> + BuildingsView() :ICollectionView + Cities() :ObservableCollection<City> + LoginCommand() :DelegateCommand + LogoutCommand() :DelegateCommand + AddBuildingImageCommand() :DelegateCommand + RemoveBuildingImageCommand() :DelegateCommand «event» + LoginFailed() :EventHandler + LoginSuccess() :EventHandler -_Client System.ServiceModel.ClientBase RentalServiceReference::RentalServiceClient «interface» Service::IRentalService + Login(String, String) :Boolean + Logout() :void + ListCities(Boolean) :City[] + ListBuildings(Boolean) :Building[] + ListBuildingsForCity(City, Boolean) :Building[] + AddBuildingImage(BuildingImage) :void + RemoveBuildingImage(Int32) :void Service::RentalService -_Entities ObjectContext Service::TravelAgencyEntities ELTE IK, Webes alkalmazások fejlesztése 14:9

Példa Megvalósítás (TravelAgencyViewModel.cs): private void AddBuildingImageExecuted(Building building){ BuildingImage image = new BuildingImage{ BuildingId = building.id, ImageSmall = GetSizedImageBytes(dialog.FileName, 100), // az eredeti képet átméretezzük }; // létrehozzuk a képet _Client.AddBuildingImage(image); // felvesszük a képek közé a szerveren ELTE IK, Webes alkalmazások fejlesztése 14:10

Példa Megvalósítás (TravelAgencyViewModel.cs): // kép átméretezése és konvertálása private Byte[] GetSizedImageBytes(String path, Int32 height){ BitmapImage image = new BitmapImage(); image.begininit(); // kép betöltése image.urisource = new Uri(path); image.decodepixelheight = height; // megadott méretre image.endinit(); PngBitmapEncoder encoder = new PngBitmapEncoder(); // átalakítás PNG formátumra ELTE IK, Webes alkalmazások fejlesztése 14:11

Példa Megvalósítás (TravelAgencyViewModel.cs): encoder.frames.add(bitmapframe.create(image)); } using (MemoryStream stream = new MemoryStream()) // átalakítás byte-tömbre { encoder.save(stream); return stream.toarray(); } ELTE IK, Webes alkalmazások fejlesztése 14:12

Biztonsági kérdések Amennyiben a szolgáltatás az interneten elérhető, számos ponton megtámadhatóvá válik, pl.: lehallgathatják a hálózati üzeneteket megtámadhatják a klienst/szervert, és kilophatják a tárolt adatokat (pl. memóriából, adatbázisból) adatlopás kliens hálózat lehallgatás adatlopás webszerver szolgáltatás ELTE IK, Webes alkalmazások fejlesztése 14:13

Üzenet titkosítás és azonosítás A hálózat lehallgatás során a küldött/fogadott adatok kerülhetnek idegen kezekbe, amelyek egyszerű protokollok (pl. SOAP) használata miatt könnyen kiolvashatóak az üzeneteket megfelelően kell titkosítani, erre szolgál a Transport Layer Security (TLS, SSL) A WCF két szinten támogatja a biztonságos kapcsolatokat: kapcsolat: minden üzenetet külön kódolni és dekódolni kell, amihez egy tanúsítvány (certificate) kerül megosztásra a kliens számára üzenet: minden üzenetnek külön tanúsítványa van (önhordozó), és csak a tartalma kerül kódolásra ELTE IK, Webes alkalmazások fejlesztése 14:14

Üzenet titkosítás és azonosítás A titkosításhoz tartozik szorosan a felhasználói azonosítás, hiszen eleve csak megbízható kliensekkel akarjuk a titkosított csatornát megosztani több megoldás támogatott, pl. Windows authentikáció Egyedi felhasználónév/jelszó azonosítást is definiálhatunk a UserNamePasswordValidator osztály specializációjával a Validate metódusban tetszőleges ellenőrzéseket valósíthatunk meg felhasználónévre, jelszóra ha a metódus kivételt dob (SecurityTokenException), akkor az ellenőrzés érvénytelen, egyébként érvényes a konkrét kivételt a kliens nem kapja meg ELTE IK, Webes alkalmazások fejlesztése 14:15

Üzenet titkosítás és azonosítás Pl.: public class EmployeeValidator : UserNamePasswordValidator // ellenőrző osztály { public override void Validate(String username, String password){ if (String.IsNullOrEmpty(userName)) throw new SecurityTokenException(); // ha nem adott meg felhasználónevet, // kivételt dobunk } } // további ellenőrzések ELTE IK, Webes alkalmazások fejlesztése 14:16

Üzenet titkosítás és azonosítás A szolgáltatás viselkedésénél konfiguráljuk az azonosítás módját (ServiceBehavior.ServiceCredentials) egyedi (Custom) azonosítás esetén az azonosításhoz tartozó típusa típus esetén megadjuk a teljes elérési útvonalat (névtér, típus, szerelvény) A TSL használatához a webszervernek szolgáltatnia kell egy X.509 tanúsítványt, amely tartalmazza a hozzáférési kulcsokat a tanúsítvány vásárolható, vagy készíthető (pl. SelfCert), utóbbi esetben nem lesz hiteles a tanúsítványhoz tartozik egy azonosító, amely általában a szerver azonosítója (névtere) ELTE IK, Webes alkalmazások fejlesztése 14:17

Üzenet titkosítás és azonosítás Pl.: <servicecredentials> <!-- A szolgáltatás biztonsági adatai --> <usernameauthentication usernamepasswordvalidationmode="custom" customusernamepasswordvalidatortype= "EmployeeService.EmployeeValidator, EmployeeService" /> <!-- egyedi azonosítás, amely a megadott típust fogja használni a név/jelszó ellenőrzésre a megadott szolgáltatáshoz --> ELTE IK, Webes alkalmazások fejlesztése 14:18

Üzenet titkosítás és azonosítás Pl.: <servicecredentials> <servicecertificate findvalue="mydomain" storelocation="localmachine" storename="my" x509findtype="findbysubjectname"/> <! tanúsítvány (szerver) azonosítója, helye (tároló és mappa), és a keresés módja --> ELTE IK, Webes alkalmazások fejlesztése 14:19

Üzenet titkosítás és azonosítás A kötésnek megadható, hogy milyen biztonsági üzemmódot (Security) használjon, ezt követően az üzenetek biztonságos csatornán keresztül továbbítódnak csak egyes kötéssekkel használható (pl. WsHttpBinding) pl.: <wshttpbinding> <binding> <security mode="message"> <message clientcredentialtype="username"/> </security> <! üzenet alapú titkosítás, ami név és jelszó alapján azonosít --> ELTE IK, Webes alkalmazások fejlesztése 14:20

Üzenet titkosítás és azonosítás A kliensnél meg kell adnunk az azonosítás paramétereit kliens oldalon is a ClientCredentials tulajdonság tartalmazza a biztonsági beállításokat a UserName írja le a felhasználó azonosítását, ennek meg kell adnunk a felhasználónevet, illetve jelszót (UserName, Password) megadhatjuk a tanúsítvány hitelesítésének módját (CertificateValidationMode), így elfogadhatjuk nem hiteles tanúsítványokat is (None) a konfigurációban megadjuk a szerver (tanúsítvány) azonosítóját (Endpoint.Identity.Dns) ELTE IK, Webes alkalmazások fejlesztése 14:21

Üzenet titkosítás és azonosítás Pl.: // kliens példányosítása client.clientcredentials.servicecertificate. Authentication.CertificateValidationMode = X509CertificateValidationMode.None; // nem várjuk el a megbízható tanúsítványt // beállítjuk a felhasználónevet és jelszót client.clientcredentials.username.username = ; client.clientcredentials.username.password = ; // hívhatjuk az első műveletet ELTE IK, Webes alkalmazások fejlesztése 14:22

Üzenet titkosítás és azonosítás Pl.: <client> <endpoint > <identity> <dns value="mydomain" /> <!-- megadjuk a szerver (tanúsítvány) azonosítóját ---> </identity> A kliens is szolgáltathat tanúsítványt, erre vonatkozó feltételeket a kliens és a szerver oldalon is meg kell adnunk (clientcertificate) ELTE IK, Webes alkalmazások fejlesztése 14:23

Példa Feladat: Módosítsuk az előző adminisztrációs rendszert úgy, hogy biztonságos és hatékony legyen. a kommunikációt TLS segítségével valósítjuk meg, név/jelszó alapú azonosítással (az adatokat az adatbázisból hitelesítjük), ezzel megfelelő azonosító típust (OperatorValidator) hozunk létre az adatbázisban a jelszót binárisan, SHA1 kódolva tároljuk a kliens a jelszót PasswordBox segítségével kéri be a szolgáltatást munkafolyamat alapon példányosítjuk és visszahívások segítségével jelezzük az adatbázisbeli változásokat, ehhez szükséges visszahívó interfészt (IRentalServiceCallback) és típust hozunk létre ELTE IK, Webes alkalmazások fejlesztése 14:24

Példa Tervezés: RentalService «interface» IRentalService + Login(String) :void + Logout() :void + ListCities(Boolean) :City[] + ListBuildings(Boolean) :Building[] + ListBuildingsForCity(City, Boolean) :Building[] + AddBuildingImage(BuildingImage) :void + RemoveBuildingImage(Int32) :void UserNamePasswordValidator OperatorValidator - _entities :TravelAgencyEntities - _callbackservices :List<IRentalServiceCallback> - _currentoperator :Operator - _currentcallbackservice :IRentalServiceCallback - RentalService() + Login(String) :void + Logout() :void + ListCities(Boolean) :City[] + ListBuildings(Boolean) :Building[] + ListBuildingsForCity(City, Boolean) :Building[] + AddBuildingImage(BuildingImage) :void + RemoveBuildingImage(Int32) :void 0..* + Validate(String, String) :void -_callbackservices -_currentcallbackservice «interface» IRentalServiceCallback + SendBuildings(Building[]) :void ELTE IK, Webes alkalmazások fejlesztése 14:25

Példa Megvalósítás (OperatorValidator.cs): public override void Validate(String username, String password){ Byte[] passwordbytes; using (SHA1CryptoServiceProvider provider = new SHA1CryptoServiceProvider()) { // SHA1 kódoló, mivel a jelszavakat kódoltan // tároljuk passwordbytes = provider.computehash( Encoding.UTF8.GetBytes(password)); // átalakítjuk a jelszót kódoltra } ELTE IK, Webes alkalmazások fejlesztése 14:26

Példa Megvalósítás (OperatorValidator.cs): Operator currentoperator = entities.operator. FirstOrDefault(op => op.username == username); // lekérdezzük a felhasználót az adatbázisból } if (currentoperator == null!passwordbytes.sequenceequal( currentoperator.userpassword)) // ha nem találtuk meg, vagy a jelszó nem // egyezik, kivételt dobunk throw new SecurityTokenException("Username or password does not match."); ELTE IK, Webes alkalmazások fejlesztése 14:27