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

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

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 14. fejezet. Szolgáltatások adatkezelése (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 8. előadás. Webszolgáltatások megvalósítása (ASP.NET WebAPI)

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

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 10. előadás. Webszolgáltatások tesztelése (ASP.NET Core) Cserép Máté

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

Eseményvezérelt alkalmazások fejlesztése II 8. előadás. Összetett WPF alkalmazások. Giachetta Roberto. Eötvös Loránd Tudományegyetem Informatikai Kar

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

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

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

2. Beadandó feladat dokumentáció

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é

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

API tervezése mobil környezetbe. gyakorlat

1. beadandó feladat dokumentáció

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

Webes alkalmazások fejlesztése 5. előadás. Adatbevitel és validáció (ASP.NET)

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

2. Beadandó feladat dokumentáció

MVC. Model View Controller

Java Programozás 11. Ea: MVC modell

3. Beadandó feladat dokumentáció

Web-fejlesztés NGM_IN002_1

Webes alkalmazások fejlesztése

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

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

Webes alkalmazások fejlesztése Bevezetés. Célkitűzés, tematika, követelmények. A.NET Core keretrendszer

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

Webes alkalmazások fejlesztése 5. előadás. Adatbevitel és validáció (ASP.NET) Cserép Máté.

Webes alkalmazások fejlesztése Bevezetés. Célkitűzés, tematika, követelmények. A.NET Core keretrendszer

MŰSZAKI DOKUMENTÁCIÓ. Aleph WebOPAC elérhetővé tétele okostelefonon. Eötvös József Főiskola 6500 Baja, Szegedi út 2.

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

Webes alkalmazások fejlesztése. Bevezetés az ASP.NET MVC 5 keretrendszerbe

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

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

WCF, Entity Framework, ASP.NET, WPF 1. WCF service-t (adatbázissal Entity Framework) 2. ASP.NET kliens 3. WPF kliens

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

Webes alkalmazások fejlesztése 3. előadás. Objektumrelációs adatkezelés (Entity Framework) Cserép Máté.

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

Használati utasítás.

Gyakorlati vizsgatevékenység A

KlausenMobi. Követelmény dokumentáció. Verzió: 1.0. Dátum: Státusz: Released

Gyakorlati vizsgatevékenység B

3. Határozza meg és írja ki a minta szerint, hogy a forrásállományban hány kémiai elem felfedezési adatai

Az autorizáció részletes leírása

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

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

Grafikus keretrendszer komponensalapú webalkalmazások fejlesztéséhez

1. Beadandó feladat dokumentáció

Példa webáruház kialakítás rendszerdokumentáció

Webes alkalmazások fejlesztése 3. előadás. Objektumrelációs adatkezelés (Entity Framework) Cserép Máté

Zimbra levelező rendszer

Mobil Telefonon Keresztüli Felügyelet Felhasználói Kézikönyv

3. Beadandó feladat dokumentáció

Torna. A torna.csv UTF-8 kódolású állományban soronként egy versenyző eredményeit tároljuk. Az adatokat pontosvessző választja el egymástól.

einvoicing Elektronikus számlázás Ügyfélportál Felhasználói kézikönyv Ügyfélportál V Page 1 of 12

Johanyák Zsolt Csaba: Grafikus felület programozása. Copyright 2008 Johanyák Zsolt Csaba

Elektronikus levelek. Az informatikai biztonság alapjai II.

ZH mintapélda. Feladat. Felület

e-szignó Online e-kézbesítés Végrehajtási Rendszerekhez

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

Adatkezelési nyilatkozat, szabályzat

Sulidoc Iskolai dokumentum megosztó Dokumentáció

Egyetemi könyvtári nyilvántartó rendszer

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

MŰSZAKI KÖVETELMÉNYEK, A KÖRKERESŐ SZOFTVER SPECIFIKÁCIÓJA, KÖLTSÉGVETÉS. A) Műszaki követelmények

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

1. ábra Fájl feltöltése 2. ábra Megtekintés

Grafikus felhasználói felület (GUI) létrehozása A GUI jelentése Egy egyszerű GUI mintaalkalmazás létrehozása

KROMESCH SÁNDOR APP FELHŐ. API-k és Webszolgáltatások a Cloudban. Magyarországi Web Konferencia November 8.

PHP II. WEB technológiák. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) PHP II / 19


ISA Internetes rendelési felület

Titkosítás mesterfokon. Tíz évvel a titkosítás után. Előadó: Tóthi Dóra Kovárczi Béla András

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

Webszolgáltatások (WS)

Adabáziselérés ODBC-n keresztül utasításokkal C#-ban

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.

MIRROR TRADING KEZELÉSI

OTP ADLAK Adómentes Lakáshitel-támogatási Szolgáltatáscsomag

Tartalom. Bejelentkezés...2 Feltöltés...3 Dokumentumok...4 Jelszómódosítás...7 Jelszókérés...7 Kijelentkezés...8

Adatbázisok webalkalmazásokban

Hiteles elektronikus postafiók Perkapu

A WiFi4EU megfelelőség-ellenőrző összetevő. Végrehajtási útmutató v1.0

Egy családfaszerkesztő alkalmazás leírása

Felhasználói Kézikönyv

Diplomaterv Portál. Elektronikus szakdolgozat és diplomaterv nyilvántartó és archiváló rendszer. Útmutató a címtáras bejelentkezéshez v14

Szoftvertechnológia 8. előadás. Szoftverrendszerek tervezése Giachetta Roberto

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

A gyakorlaton megoldandó feladat. Áttekintés. Probléma - Tervezés. 6. gyak 1. feladat. ASP.NET Alapozó. Authentikáció és Authorizáció

O365 és felhő szolgáltatások igénybevételéhez szükséges beállítások

Adatbázis alapú rendszerek gyakorlat Adatbázis alapú alkalmazásfejlesztés Java, C# környezetben

A Java EE 5 plattform

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

Átírás:

Eötvös Loránd Tudományegyetem Informatikai Kar Webes alkalmazások fejlesztése 9. előadás II. (ASP.NET Core) Cserép Máté mcserep@inf.elte.hu http://mcserep.web.elte.hu

Adatok titkosítása memóriában A teljes biztonsághoz a memóriában lévő kényes tartalmat is titkosítani kell, mivel az is potenciális támadási felület lehetőség szerint csak a feldolgozás időtartamára szerepeljen titkosítatlan információ a memóriában, egyébként kódolva tároljuk Szövegek titkosított kezelésére szolgál a SecureString típus, amely alapvetően titkosítva tárolja a jelszót, és csak lekéréskor (ToString) dekódolja a grafikus felületen a jelszavak titkosított bekérését a PasswordBox biztosítja, a Password tulajdonság feloldja a titkosítást (amely nem függőségi tulajdonság, így nem köthető) ELTE IK, Webes alkalmazások fejlesztése 9:2

Adatok titkosítása memóriában Pl.: <Button Content="Bejelentkezés" Command="{Binding LoginCommand}" CommandParameter="{Binding ElementName=passwordBox}" /> <!-- magát a jelszóbekérőt adjuk át --> LoginCommand = new DelegateCommand(param => { _model.login(username, (param as PasswordBox).Password); // kiolvassuk a titkosított jelszót } ELTE IK, Webes alkalmazások fejlesztése 9:3

Feladat: Valósítsuk meg az utazási ügynökség épületeit karbantartó asztali alkalmazást. adjunk lehetőséget képek megtekintésére, hozzáadására, törlésére a képet fájlból töltjük be, majd átméretezzük (kis és nagy méretben, PNG formátumban) a képeket egyedi azonosítóval látjuk el, valamint az épület azonosítójával a biztonság növelésére az adatkezelést authentikációhoz kötjük (ASP.NET Core Identity segítségével), így a felhasználónak előbb be kell jelentkezniük az alkalmazásba ELTE IK, Webes alkalmazások fejlesztése 9:4

Tervezés: létrehozunk egy vezérlőt (BuildingImageController), valamint egy adatátviteli típust (ImageDTO) a képkezeléshez a képeket alapvetően byte tömbként kezeljük, a szolgáltatás nem is ismeri azok képi tartalmát a képbetöltést egy segédtípusban (ImageHandler) végezzük a képek megjelenítéséhez átalakítást végzünk (BuildingImageConverter), ami BitmapImage típusra alakítja a tömböt, ezeket Image vezérlővel jelenítjük meg külön nézetbe szervezzük az épület adatainak megadását (BuldingEditorWindow) ELTE IK, Webes alkalmazások fejlesztése 9:5

Tervezés: létrehozunk egy vezérlőt a felhasználó-kezeléshez (AccountController), ebben lehetőséget adunk bejelentkezésre (Login) és kijelentkezésre (Logout) a szolgáltatásban attribútum (Authorize) segítségével korlátozzuk az akciófüggvényekhez való hozzáférést (csak a rendszergazda csoportban lévő felhasználókra) kliens oldalon megjelenik a két új művelet a modellben (LoginAsync, LogoutAsync) a bejelentkezéshez egy külön nézetet (LoginWindow), valamint nézetmodellt (LoginViewModel) hozunk létre ELTE IK, Webes alkalmazások fejlesztése 9:6

Tervezés (szolgáltatás): «interface» Models::ITrav elagencyentities IDisposable -_entities Controllers::BuildingsController ApiController Controllers::CitiesController ApiController Controllers::AccountController ApiController - _context: AdministratorDbContext - _usermanager: UserManager<IdentityUser> - _rolemanager: RoleManager<IdentityRole> + AccountController() - ~AccountController() + Login(String, String): IHttpActionResult + Logout(): IHttpActionResult # Dispose(Boolean): void Controllers::BuildingImagesController - _entities: ITravelAgencyEntities ApiController + BuildingImagesController() + BuildingImagesController(ITravelAgencyEntities) - ~BuildingImagesController() + GetImages(Int32): IHttpActionResult + GetImage(Int32): IHttpActionResult + PostImage(ImageDTO): IHttpActionResult + DeleteImage(Int32): IHttpActionResult # Dispose(Boolean): void ELTE IK, Webes alkalmazások fejlesztése 9:7

Tervezés (kliens): ViewModel::MainViewModel ViewModelBase - _model: ITravelAgencyModel - _buildings: ObservableCollection<BuildingDTO> - _cities: ObservableCollection<CityDTO> - _selectedbuilding: BuildingDTO - _isloaded: Boolean + MainViewModel(ITravelAgencyModel) - UpdateBuilding(BuildingDTO): void - DeleteBuilding(BuildingDTO): void - DeleteImage(ImageDTO): void - SaveChanges(): void - CancelChanges(): void - LoadAsync(): void - SaveAsync(): void - Model_BuildingChanged(object, BuildingEventArgs): void - OnExitApplication(): void - OnBuildingEditingStarted(): void - OnBuildingEditingFinished(): void - OnImageEditingStarted(Int32): void «property» + Buildings(): ObservableCollection<BuildingDTO> + Cities(): ObservableCollection<CityDTO> + IsLoaded(): Boolean + SelectedBuilding(): BuildingDTO + EditedBuilding(): BuildingDTO + CreateBuildingCommand(): DelegateCommand + CreateImageCommand(): DelegateCommand + UpdateBuildingCommand(): DelegateCommand + DeleteBuildingCommand(): DelegateCommand + DeleteImageCommand(): DelegateCommand + SaveChangesCommand(): DelegateCommand + CancelChangesCommand(): DelegateCommand + ExitCommand(): DelegateCommand + LoadCommand(): DelegateCommand + SaveCommand(): DelegateCommand «event» + ExitApplication(): EventHandler + BuildingEditingStarted(): EventHandler + BuildingEditingFinished(): EventHandler + ImageEditingStarted(): EventHandler<BuildingEventArgs> -_mainviewmodel - _model: ITravelAgencyModel - _loginviewmodel: LoginViewModel - _loginview: LoginWindow - _mainviewmodel: MainViewModel - _mainview: MainWindow - _editorview: BuildingEditorWindow App + App() - App_Startup(object, StartupEventArgs): void + App_Exit(object, ExitEventArgs): void - ViewModel_LoginSuccess(object, EventArgs): void - ViewModel_LoginFailed(object, EventArgs): void - ViewModel_MessageApplication(object, MessageEventArgs): void - MainViewModel_BuildingEditingStarted(object, EventArgs): void - MainViewModel_BuildingEditingFinished(object, EventArgs): void - MainViewModel_ImageEditingStarted(object, BuildingEventArgs): void - ViewModel_ExitApplication(object, System.EventArgs): void ViewModel::ImageHandler + OpenAndResize(String, Int32): Byte[] Application -_loginview -_loginviewmodel ViewModel::LoginViewModel - _model: ITravelAgencyModel + LoginViewModel(ITravelAgencyModel) - LoginAsync(PasswordBox): void - OnLoginSuccess(): void - OnExitApplication(): void - OnLoginFailed(): void «property» + ExitCommand(): DelegateCommand + LoginCommand(): DelegateCommand + UserName(): String «event» + ExitApplication(): EventHandler + LoginSuccess(): EventHandler + LoginFailed(): EventHandler Window View::LoginWindow ViewModelBase ELTE IK, Webes alkalmazások fejlesztése 9:8

Tervezés (kliens): Model::Trav elagencymodel - _persistence: ITravelAgencyPersistence - _buildings: List<BuildingDTO> - _buildingflags: Dictionary<BuildingDTO, DataFlag> - _imageflags: Dictionary<ImageDTO, DataFlag> - _cities: List<CityDTO> + TravelAgencyModel(ITravelAgencyPersistence) + CreateBuilding(BuildingDTO): void + CreateImage(Int32, Byte[], Byte[]): void + UpdateBuilding(BuildingDTO): void + DeleteBuilding(BuildingDTO): void + DeleteImage(ImageDTO): void + LoadAsync(): Task + SaveAsync(): Task + LoginAsync(String, String): Task<Boolean> + LogoutAsync(): Task<Boolean> - OnBuildingChanged(Int32): void «property» + Cities(): IReadOnlyList<CityDTO> + Buildings(): IReadOnlyList<BuildingDTO> + IsUserLoggedIn(): Boolean «event» + BuildingChanged(): EventHandler<BuildingEventArgs> -_persistence - _client: HttpClient «interface» Persistence::ITrav elagencypersistence Persistence::Trav elagencyserv icepersistence + TravelAgencyServicePersistence(String) + ReadBuildingsAsync(): Task<IEnumerable<BuildingDTO>> + ReadCitiesAsync(): Task<IEnumerable<CityDTO>> + CreateBuildingAsync(BuildingDTO): Task<Boolean> + UpdateBuildingAsync(BuildingDTO): Task<Boolean> + DeleteBuildingAsync(BuildingDTO): Task<Boolean> + CreateBuildingImageAsync(ImageDTO): Task<Boolean> + DeleteBuildingImageAsync(ImageDTO): Task<Boolean> + LoginAsync(String, String): Task<Boolean> + LogoutAsync(): Task<Boolean> ELTE IK, Webes alkalmazások fejlesztése 9:9

Megvalósítás (BuildingImagesController.cs): [Authorize(Roles = "administrator")] // csak bejelentkezett adminisztrátoroknak public IActionResult PostImage([FromBody] ImageDTO image) { BuildingImage buildingimage = new _context.savechanges(); return CreatedAtAction(nameof(GetImage), new { id = buildingimage.id }, buildingimage.id); // csak az azonosítót küldjük vissza } ELTE IK, Webes alkalmazások fejlesztése 9:10

Megvalósítás (ImageHandler.cs): public static Byte[] OpenAndResize(String path, Int32 height) { BitmapImage image = new BitmapImage(); // kép betöltése image.begininit(); image.urisource = new Uri(path); image.decodepixelheight = height; // megadott méretre image.endinit(); ELTE IK, Webes alkalmazások fejlesztése 9:11

Megvalósítás (ImageHandler.cs): PngBitmapEncoder encoder = new PngBitmapEncoder(); // átalakítás PNG formátumra 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 9:12

Kleins alkalmazások A webszolgáltatások a szerver-oldali backend alkalmazás általános körű felhasználását teszik lehetővé. Tetszőleges platformú kliens alkalmazás nyújthat kliens oldali felületet a webszolgáltatáshoz. Asztali alkalmazás, mobil alkalmazás, weboldal Más webszolgáltatás is felhasználhatja A backend webszolgáltatás és a frontend kliensek eltérő platformokon és programozási nyelveken, eltérő fejlesztő csapatok által, párhuzamosan is fejleszthetőek. ELTE IK, Webes alkalmazások fejlesztése 9:13

Feladat: Valósítsuk meg egy utazási ügynökség weblapját, amelyben apartmanok között böngészhetünk. könnyítsük meg a foglalást az által, hogy a dátumot egy naptár (gldatepicker) segítségével lehessen kiválasztani a dátumkiválasztó automatikusan lekérdezi (jquery segítségével) a szolgáltatástól, mely napok szabadok a szolgáltatása vezérlője (RentDateController) egy műveletet biztosít (Get) a megfelelő napok lekérdezésére magát a lekérdezést a modell (TravelService) biztosítja (GetRentDates), amely adott egy hónap körüli ELTE IK, Webes alkalmazások fejlesztése 9:14

Megvalósítás (RentDateController.cs): [ApiController] [RoutePrefix("api/[controller]")] // útvonal feloldás megadása public class RentDateController : Controller { [Route("{apartmentId}/{year}/{month}")] // útvonal feloldás megadása public IEnumerable<DateTime> Get( Int32? apartmentid, Int32? year, Int32? month) { } } ELTE IK, Webes alkalmazások fejlesztése 9:15

Megvalósítás (Rent/Index.cshtml): <script type="text/javascript"> $(window).load(function () { jquery.getjson("api/rentdate/" + @Model.Apartment.Id + "/" + year + "/" + month, function (data) { options.selectabledates = parsedates(data); }); } ELTE IK, Webes alkalmazások fejlesztése 9:16