Viac

Ako urobiť žiadosť o odpočinok na Geoserver v Pythone?


Zaujímalo by ma, ako urobiť požiadavku GET na geoserver 2.6 v Pythone.

import urllib2, json url = 'http: // localhost: 8080 / geoserver / rest / workspaces.json' authKey = 'admin: geoserver' headers = {'Authorization': "Basic" + authKey} params = {} request = urllib2 .Request (url, json.dumps (params), headers) try: response = urllib2.urlopen (request, timeout = 30) .read () print json.loads (response) except urllib2.HTTPError as e: print e print e .header tlačiť e.read ()

s vyššie uvedeným kódom sa zobrazí chyba HTTP 500: Chyba servera. Ak nastavím hodnotu authKey na „, zobrazí sa mi„ Chyba HTTP 401: Na prístup k tomuto prostriedku sa vyžaduje úplné overenie “

Ako teda môžem nastaviť hlavičku žiadosti s autorizáciou?


Aktualizácia:
Tlačím e.headers okrem výnimky, potom som dostal:

Dátum: Utorok, 17. marca 2015 15:33:04 GMT Typ obsahu: text / html; charset = ISO-8859-1 Cache-Control: must-revalidate, no-cache, no-store Obsah-dĺžka: 6639 Pripojenie: zavrieť Server: Jetty (7.6.13.v20130916)

Mám príklad REST, ktorý funguje na GWC, takže ho nastavím tak, aby bol zdieľaný: https://gist.github.com/alexgleith/c39c3f520102c30e4dec

Tu sú mäsité kúsky:

url = baseURL + vrstva + '.json' požiadavka = urllib2.Request (url) base64string = base64.encodestring ('% s:% s'% (un, pw)). žiadosť o nahradenie (' n', "). add_header ("Autorizácia", "Základné% s"% base64string) request.add_header ('Content-Type', 'application / json') data = {'seedRequest': {'minX': [], 'minY': [ ], 'maxX': [], 'maxY': [], 'gridSetId': 'EPSG: 900913', 'zoomStart': 00, 'zoomStop': 18, 'formát': 'obrázok / png', 'typ ':' seed ',' threadCount ': 2}} data = json.dumps (data) request.add_data (data) req = urllib2.urlopen (žiadosť)

Vďaka, alexgleith!

Problém v mojom jednoduchom kóde je:

authKey = 'admin: geoserver' request = urllib2.Request (url, json.dumps (params), hlavičky)

by sa mal nahradiť ako:

authKey = base64.encodestring ('% s:% s'% (un, pw)). replace (' n', ") request = urllib2.Request (url) pre k v headers.keys (): request.add_header (k, hlavičky [k])

Ako sťahovať súbory GeoTiff z GeoServeru pomocou Pythonu

Snažím sa sťahovať súbory GeoTiff z GeoServeru pomocou Pythonu. Našiel som online niekoľko zdrojov informácií o tomto type vecí, ale nepodarilo sa mi splniť túto úlohu.

Napríklad tu: https://gis.stackexchange.com/questions/181560/download-geotiff-from-geoserver sa zdá, že ľudia boli schopní robiť to, čo chcem, ale nevysvetľujú ich postup.

Rovnako tu je prijatá odpoveď: Ako chytiť obrázok TIFF z pythonu funguje na stiahnutie GeoTiffov, ako je ten na http://imgsrc.hubblesite.org/hu/db/images/hs-2006-01-a-hires_tif.tif , ale na GeoServeri neexistuje odkaz na stiahnutie pre GeoTiffs.

Akákoľvek pomoc by bola veľmi ocenená!

EDIT: Tu je niekoľko ďalších podrobností o tom, čo som doteraz vyskúšal. GeoServer má server odpočinku API na adrese http: // localhost: 8080 / geoserver / rest lokálne, takže som sa spočiatku pokúsil získať prístup k tejto adrese URL v pythone a potom stiahnuť súbor GeoTiff, ktorý chcem, do priečinka „Layers“. Každý zo súborov v položke „Layers“ je však html súbor, o čom by som sa rád dozvedel, ak existuje miesto, kde môžem skutočne programovo získať prístup k súborom GeoTiff. Myslím si, že toto je koreň problému - aj keď si nie som celkom istý, ako programovo sťahovať GeoTiffy, musím k nim najskôr získať skutočný prístup v GeoServeri.

Pokiaľ však ide o pokrok, nebol som schopný urobiť veľa. Ako som už spomenul vyššie, bol som schopný stiahnuť GeoTiff pomocou kódu na Ako chytiť TIFF obrázok z pythonu, ale nebol som schopný to urobiť pre GeoTiff na GeoServeri. Som nový vo formáte GeoServer aj GeoTiff, takže si nie som celkom istý, ako k tomuto problému pristupovať.


21 odpovedí 21

Áno. Inými slovami, každá správa s požiadavkou HTTP môže obsahovať telo správy, a preto musí správy analyzovať s týmto ohľadom. Sémantika servera pre GET je však obmedzená tak, že prípadné telo nemá pre požiadavku žiadny sémantický význam. Požiadavky na syntaktickú analýzu sú odlišné od požiadaviek na sémantiku metódy.

Takže, áno, môžete poslať telo pomocou GET a nie, nikdy to nie je užitočné.

Toto je súčasť vrstveného vzoru protokolu HTTP / 1.1, ktorý sa znovu vyjasní po rozdelení špecifikácie (nedokončená výroba).

. Roy

Áno, telo žiadosti môžete poslať pomocou GET, nemalo by to však mať žiadny význam. Ak tomu dáte zmysel analýzou na serveri a zmena vašej odpovede na základe jej obsahu, potom ignorujete toto odporúčanie v špecifikácii HTTP / 1.1, časť 4.3:

. ak metóda požiadavky nezahŕňa definovanú sémantiku pre telo entity, potom by telo správy malo byť pri spracovaní žiadosti ignorované.

A popis metódy GET v špecifikácii HTTP / 1.1, časť 9.3:

Metóda GET znamená načítať všetky informácie ([.]), Ktoré identifikuje Request-URI.

ktorá uvádza, že telo žiadosti nie je súčasťou identifikácie zdroja v žiadosti GET, iba identifikátor URI žiadosti.

RFC2616 označovaný ako & quotHTTP / 1.1 spec & quot je teraz zastaraný. V roku 2014 bol nahradený RFC 7230-7237. Citácia a text správy by MAL BY byť ignorovaný pri spracovaní žiadosti & quot; bol odstránený. Teraz je to len & quotRámovanie rámcov správ je nezávislé od sémantiky metódy, aj keď metóda nedefinuje žiadne použitie pre telo správy & quot; 2. citát & quot; Metóda GET znamená načítať akékoľvek informácie. je identifikovaný Request-URI & quot bol vymazaný. - Z komentára

Užitočné zaťaženie v správe žiadosti GET nemá definovanú sémantiku. Odosielanie tela užitočného zaťaženia pri požiadavke GET môže spôsobiť, že niektoré existujúce implementácie odmietnu požiadavku.

Zatiaľ čo vy môcť urobte to, pokiaľ to nie je výslovne vylúčené v špecifikácii HTTP, navrhujem vyhnúť sa tomu jednoducho preto, lebo ľudia neočakávajú, že veci budú fungovať týmto spôsobom. V reťazci požiadaviek HTTP je veľa fáz a aj keď „väčšinou“ zodpovedajú špecifikácii HTTP, máte istotu len v tom, že sa budú správať tak, ako ich tradičné webové prehliadače používajú. (Mám na mysli veci ako transparentné proxy, akcelerátory, sady nástrojov A / V atď.)

To je podstata princípu robustnosti zhruba „buďte liberálni v tom, čo prijímate, a konzervatívni v tom, čo posielate“, nechcete bez dobrého dôvodu posúvať hranice špecifikácie.

Ak však máte dobrý dôvod, choďte do toho.

Pravdepodobne narazíte na problémy, ak sa niekedy pokúsite využiť ukladanie do pamäte cache. Server proxy nebude hľadať v tele GET, aby zistil, či majú parametre vplyv na reakciu.

Konzola restclient ani REST to nepodporujú, ale zvlnenie áno.

Telo správy NESMIE byť zahrnuté v žiadosti, ak špecifikácia metódy požiadavky (časť 5.1.1) neumožňuje zasielanie tela entity v požiadavkách.

Oddiel 5.1.1 nás presmerováva na rôzne metódy do sekcie 9.x. Žiadny z nich výslovne nezakazuje zahrnutie tela správy. Avšak.

Presný zdroj identifikovaný internetovou požiadavkou je určený preskúmaním poľa Request-URI aj poľa hlavičky hostiteľa.

Metóda GET znamená načítať všetky informácie (vo forme entity), ktoré identifikuje Request-URI.

Čo dokazuje, že pri spracovaní požiadavky GET to server nie je požadovaný na preskúmanie všetkého iného, ​​čo je pole Request-URI a Host header.

Stručne povedané, špecifikácia HTTP vám nebráni v odoslaní tela správy pomocou GET, ale existuje dostatočná nejednoznačnosť, že by ma neprekvapilo, keby ju nepodporovali všetky servery.

Elasticsearch prijíma požiadavky GET s telom. Dokonca sa zdá, že toto je preferovaný spôsob: Sprievodca elasticsearch

Niektoré klientske knižnice (napríklad ovládač Ruby) môžu príkaz cry prihlásiť do štandardného režimu vo vývojovom režime a vo veľkej miere používajú túto syntax.

Môžete buď poslať GET s telom, alebo poslať POST a vzdať sa RESTish religiozity (nie je to také zlé, pred 5 rokmi bol iba jeden člen tejto viery - jeho komentáre odkazujú vyššie).

Nie sú to ani veľké rozhodnutia, ale odoslanie tela GET môže zabrániť problémom pre niektorých klientov - a niektoré servery.

Uskutočnenie testu POST môže mať prekážky v niektorých rámcoch RESTish.

Julian Reschke navrhol vyššie použitie neštandardnej hlavičky HTTP, napríklad „SEARCH“, ktorá by mohla byť elegantným riešením, až na to, že je ešte menej pravdepodobné, že bude podporovaná.

Najproduktívnejšie by mohlo byť vymenovať klientov, ktorí môžu a nemôžu robiť všetky uvedené kroky.

Klienti, ktorí nemôžu poslať GET s telom (o ktorom viem):

Klienti, ktorí môžu poslať GET s textom:

Servery a knižnice zosilňovačov, ktoré dokážu načítať telo zo systému GET:

Servery (a proxy), ktoré zbavujú telo GET:

To, čo sa snažíte dosiahnuť, sa už dlho robí oveľa bežnejšou metódou a takou, ktorá sa nespolieha na použitie užitočného zaťaženia pomocou GET.

Môžete jednoducho vytvoriť svoj konkrétny typ média vyhľadávania, alebo ak chcete byť RESTívnejší, použite niečo ako OpenSearch a POŽIADAJTE požiadavku na URI, na ktorý dal server príkaz, povedzme / search. Server potom môže vygenerovať výsledok vyhľadávania alebo vytvoriť konečný URI a presmerovať pomocou 303.

To má výhodu v dodržiavaní tradičnej metódy PRG, pomáha sprostredkovateľom ukladať výsledky do medzipamäte atď.

To znamená, že URI sú rovnako zakódované pre čokoľvek, čo nie je ASCII, a takisto sú to application / x-www-form-urlencoded a multipart / form-data. Ak máte v úmysle podporiť scenáre ReSTful, odporúčam to radšej použiť ako vytvoriť ďalší vlastný formát json.

Túto otázku kladiem na IETF HTTP WG. Komentár od Roy Fieldinga (autora dokumentu http / 1.1 v roku 1998) bol taký

". implementácia by bola prerušená, aby robila čokoľvek iné ako analyzovať a vyradiť tento orgán, ak bude prijatý"

„Náklad v správe so žiadosťou GET nemá definovanú sémantiku.“

Teraz sa zdá zrejmé, že zámerom bolo, aby sémantický význam v orgánoch žiadosti GET bol zakázaný, čo znamená, že telo žiadosti nemožno použiť na ovplyvnenie výsledku.

Existujú zástupcovia, ktorí budú určite rozbite svoju žiadosť rôznymi spôsobmi, ak zahrniete telo do programu GET.

Ktorý server to bude ignorovať? - fijiaaron 30. augusta 2012 o 21:27

Google napríklad je na tom horšie ako ignorovať, bude to považovať za chyba!

Vyskúšajte to sami pomocou jednoduchej netcat:

(po obsahu 1234 nasleduje CR-LF, teda spolu 6 bajtov)

Získate tiež 400 zlých žiadostí od spoločností Bing, Apple atď., Ktoré poskytuje AkamaiGhost.

Takže by som neodporúčal používať GET požiadavky s entitou tela.

Server by mal ČÍTAŤ a posielať ďalej telo správy na každú žiadosť, ak metóda požiadavky neobsahuje definovanú sémantiku pre telo entity, potom by telo správy MALO byť ignorovaný pri spracovaní žiadosti.

To znamená, že servery by mali vždy čítať ľubovoľné poskytnuté telo žiadosti zo siete (skontrolovať Content-Length alebo prečítať blokované telo atď.). Splnomocnenci by tiež mali posielať všetky takéto orgány žiadostí, ktoré dostanú. Ak potom RFC definuje sémantiku tela pre danú metódu, server môže skutočne použiť telo žiadosti na generovanie odpovede. Ak však RFC nie definovať sémantiku pre telo, potom by to mal server ignorovať.

Je to v súlade s citátom z Fieldingu vyššie.

Oddiel 9.3, „GET“, popisuje sémantiku metódy GET a nezmieňuje orgány žiadostí. Server by mal preto ignorovať všetky telo žiadosti, ktoré dostane na základe žiadosti GET.

Podľa XMLHttpRequest nie je platný. Zo štandardu:

4.5.6 Metóda send ()

Iniciuje požiadavku. Nepovinný argument poskytuje telo žiadosti. Argument je ignorovaný, ak je metóda požiadavky GET alebo HEAD.

Ak niektorý z týchto stavov nie je, hodí výnimku InvalidStateError otvoril alebo je nastavený príznak send ().

Odoslanie (telo) musí byť spustený tento postup:

  1. Ak štát nie je otvoril, hodí výnimku InvalidStateError.
  2. Ak je nastavený príznak send (), vyvolajte výnimku InvalidStateError.
  3. Ak je metóda požiadavky GET alebo HEAD, nastavte telo vynulovať.
  4. Ak telo je neplatný, prejdite na ďalší krok.

Aj keď si nemyslím, že by to malo byť, pretože požiadavka GET môže vyžadovať veľký obsah.

Takže ak sa spoliehate na XMLHttpRequest prehliadača, je pravdepodobné, že nebude fungovať.

Ak naozaj chcete odoslať telo JSON / XML s možnosťou medzipamäte do webovej aplikácie, jediným rozumným miestom na vloženie vašich údajov je reťazec dotazu kódovaný pomocou RFC4648: Základné 64 kódovanie pomocou adresy URL a bezpečnej abecedy názvu súboru. Samozrejme by ste mohli len urlencode JSON a dať je do hodnoty parametra URL, ale Base64 dáva menší výsledok. Nezabudnite, že existujú obmedzenia veľkosti adries URL, pozrite si časť Aká je maximálna dĺžka adresy URL v rôznych prehliadačoch? .

Možno si myslíte, že znak padding = Base64 môže byť zlý pre hodnotu parametra URL, ale zdá sa, že nie - pozrite si túto diskusiu: http://mail.python.org/pipermail/python-bugs-list/2007-February/037195.html . Nemali by ste však vkladať kódované údaje bez názvu parametra, pretože kódovaný reťazec s výplňou sa bude interpretovať ako kľúč parametra s prázdnou hodnotou. Použil by som niečo ako? _B64 = & ltencodeddata & gt.

Neradil by som to, je to v rozpore so štandardnými postupmi a na oplátku to toľko neponúka. Chcete si nechať obsah, nie možnosti.

Máte zoznam možností, ktoré sú oveľa lepšie ako použitie tela žiadosti so službou GET.

Predpokladajme, že pre každú kategóriu máte kategórie a položky. Oba musia byť identifikované pomocou id („catid“ / „itemid“ pre tento príklad). Chcete triediť podľa iného parametra „sortby“ v konkrétnom „poradí“. Chcete zadať parametre pre „sortby“ a „order“:

  1. Použite reťazce dotazu, napr. example.com/kategoria// položka /? sortby = nazov polozky & amporder = asc
  2. Pre cesty použite mod_rewrite (alebo podobné): example.com/category// položka ///
  3. Použite jednotlivé hlavičky HTTP, ktoré odovzdáte s požiadavkou
  4. Použite inú metódu, napr. POST, na získanie zdroja.

Všetky majú svoje tienisté stránky, ale sú oveľa lepšie ako použitie GET s telom.

Čo nevyhovujúce hlavičky kódované pomocou base64? „NIEČO-PARAMETRE APP: sdfSD45fdg45 / aS“

Obmedzenia dĺžky hm. Nemôžete dosiahnuť, aby vaše spracovanie POST rozlišovalo medzi významami? Ak chcete jednoduché parametre, ako je triedenie, nechápem, prečo by to mal byť problém. Myslím, že máš istotu, že sa obávaš.

Som naštvaný, že protokol REST as nepodporuje OOP a metóda Get je dôkazom. Ako riešenie môžete serializovať svoje DTO na JSON a potom vytvoriť reťazec dotazu. Na strane servera budete môcť deserializovať reťazec dotazu na DTO.

Prístup založený na správach vám môže pomôcť vyriešiť obmedzenie metódy Get. Budete môcť poslať akýkoľvek DTO ako s orgánom žiadosti

IMHO by ste mohli jednoducho poslať kódovaný JSON (tj. EncodeURIComponent) do URL, týmto spôsobom neporušíte špecifikácie HTTP a nedostanete svoj JSON na server.

Pracuje napríklad s Curl, Apache a PHP.

Vo svojom klientskom programe používam jarnú štruktúru RestTemplate a na strane servera som definoval požiadavku GET s telom Json. Môj primárny účel je rovnaký ako váš: ak má požiadavka početné parametre, ich vloženie do tela sa zdá byť upravenejšie ako vloženie do predĺženého reťazca URI. Áno?

Ale bohužiaľ to nefunguje! Na strane servera sa vyskytla nasledujúca výnimka:

org.springframework.http.converter.HttpMessageNotReadableException: požadované telo žiadosti chýba.

Som si však dosť istý, že text správy je správne uvedený v mojom kóde klienta, tak čo sa deje?

Vystopoval som metódu RestTemplate.exchange () a našiel som nasledovné:

Upozorňujeme, že v metóde executeInternal () obsahuje vstupný argument 'bufferedOutput' telo správy poskytnuté mojím kódom. Videl som to cez debugger.

Kvôli ReadyConnection () však getDoOutput () v executeInternal () vždy vráti hodnotu false, čo zase spôsobí, že bufferedOutput bude úplne ignorovaný! Nie je to skopírované do výstupného toku.

V dôsledku toho môj serverový program nedostal žiadne telo správy a túto výnimku vyhodil.

Toto je príklad RestTemplate rámca Spring. Ide o to, že aj keď telo správy už nie je zakázané špecifikáciou HTTP, niektoré knižnice alebo rámce klienta alebo servera môžu stále vyhovovať starej špecifikácii a odmietnuť telo správy z požiadavky GET.


REST API a ostatné

V priebehu rokov sa vyvinuli rôzne štandardy dátovej komunikácie. Možno ste sa už stretli s normami vrátane CORBA, SOAP alebo XML-RPC, ktoré zvyčajne stanovovali prísne pravidlá pre zasielanie správ.

REST definoval v roku 2000 Roy Fielding a je podstatne jednoduchší. Nejde o štandard, ale o súbor odporúčaní a obmedzení pre webové služby RESTful. Tie obsahujú:

Klientsky server. SystemA zadá požiadavku HTTP na adresu URL hostenú spoločnosťou SystemB, ktorá vráti odpoveď.

Je to rovnaké ako v prípade prehliadača. Aplikácia požaduje konkrétnu adresu URL. Požiadavka je smerovaná na webový server, ktorý vráti stránku HTML. Táto stránka môže obsahovať odkazy na obrázky, šablóny štýlov a JavaScript, ktoré si vyžiadajú ďalšie požiadavky a odpovede.

Bezstavový. REST je bez štátnej príslušnosti: požiadavka klienta by mala obsahovať všetky informácie potrebné na vybavenie žiadosti. Inými slovami, malo by byť možné vytvoriť dve alebo viac požiadaviek HTTP v ľubovoľnom poradí a budú sa prijímať rovnaké odpovede.

Ukladateľný do medzipamäte. Odozva by mala byť definovaná ako cachovateľná alebo nie.

Vrstvené. Žiadajúci klient nemusí vedieť, či komunikuje so skutočným serverom, serverom proxy alebo iným sprostredkovateľom.


Pomocou konzoly API

Konzola API vývojovej siete vám umožňuje vyskúšať Alma API. Konzola API je k dispozícii tu a tiež na každej stránke dokumentácie k API, kde môžete kliknúť na tlačidlo & # 8220 Vyskúšať & # 8221.

Poznámka: Ak ste sa dostali na konzolu API z Vyskúšaj to teraz Tlačidlo API je už vybraté, takže prejdite na krok 2.

Ak chcete použiť API prostredníctvom konzoly API:

  1. Vyberte API zo zoznamu:
  2. Teraz môžete vybrať zdroj a metódu zo zoznamu nižšie:
  3. Zobrazí sa formulár žiadosti o API. Zahŕňa parametre relevantné pre konkrétne API a predvolené hodnoty:
  4. Môžete kliknúť na Vyskúšaj to zmeniť predvolené hodnoty.
  5. Kliknutím na ikonu odošlite žiadosť o API Vykonať.
  6. Odozva je zobrazená nižšie v Odpovede, spolu s požiadavkou, ako ju možno volať z lokne.

Upozorňujeme, že v karanténe pre hostí sú povolené iba požiadavky GET.


4 najpoužívanejšie metódy autentifikácie REST API

Aj keď existuje toľko vlastných metód autentifikácie, koľko je systémov, ktoré ich využívajú, sú to zväčša variácie niekoľkých hlavných prístupov. V tomto príspevku si prejdem 4 najpoužívanejšie vo svete rozhraní REST API a mikroslužieb.

Autentifikácia vs autorizácia

Predtým, ako sa do toho ponorím, definujme, čo to vlastne autentifikácia je, a čo je dôležitejšie, čo to nie je. Rovnako ako autentifikácia poháňa moderný internet, aj táto téma sa často spája s úzko súvisiacim pojmom: autorizácia.

Tieto dve funkcie sú často spojené v jednom riešení, ale najjednoduchší spôsob, ako rozdeliť autorizáciu a autentifikáciu, je otázka: čo o ​​mne vlastne uvádzajú alebo dokazujú?

Overenie je, keď jednotka preukáže totožnosť. Inými slovami, autentifikácia dokazuje, že ste tým, za koho hovoríte. Je to ako mať vodičský preukaz vydaný dôveryhodným orgánom, ktorý môže žiadateľ, napríklad policajt, ​​použiť ako dôkaz, ktorý naznačuje, že ste v skutočnosti tým, za koho ste.

Povolenie je úplne iný koncept a zjednodušene povedané, autorizácia je taká, keď subjekt preukáže právo na prístup. Inými slovami, Autorizácia dokazuje, že máte právo podať žiadosť. Zvážte nasledovné - Máte pracovnú kartu s kľúčom, ktorá umožňuje otvoriť iba niektoré dvere v pracovnej oblasti, ale nie všetky.

V súhrne:
Autentifikácia: Týka sa preukázania správnej identity
Autorizácia: Odkazuje na povolenie určitej akcie

API vás môže overiť, ale neoprávniť vás na vykonanie určitej žiadosti.

Teraz, keď vieme, čo je autentifikácia, pozrime sa, aké sú najpoužívanejšie metódy autentifikácie v REST API.

4 najpoužívanejšie metódy overovania

Pozrime sa na 4 najpoužívanejšie metódy autentifikácie, ktoré sa dnes používajú.

1. Schémy autentifikácie HTTP (základná a zosilňovač)

Protokol HTTP tiež definuje schémy zabezpečenia HTTP, ako sú:

Pri diskusii o REST API si prejdeme dva najpopulárnejšie, ktoré sa dnes používajú.

Základné overenie

Základné overenie totožnosti HTTP sa zriedka odporúča z dôvodu inherentných bezpečnostných chýb.

Toto je najpriamejšia metóda a najjednoduchšia. Pri tejto metóde odosielateľ umiestni používateľské meno: heslo do hlavičky požiadavky. Používateľské meno a heslo sú kódované pomocou Base64, čo je kódovacia technika, ktorá prevádza používateľské meno a heslo na sadu 64 znakov, aby sa zabezpečil bezpečný prenos.

Táto metóda nevyžaduje súbory cookie, ID relácií, prihlasovacie stránky a ďalšie podobné špeciálne riešenia. Pretože používa samotnú hlavičku HTTP, nie je potrebné podanie si ruky alebo iný zložitý systém odpovede.

Tu je príklad základného overenia v hlavičke požiadavky:
Autorizácia: Základné bG9sOnNlY3VyZQ ==

Autentifikácia na doručiteľa

Autentifikácia na doručiteľa (tiež sa nazýva autentifikácia pomocou tokenu) je schéma autentifikácie HTTP, ktorá zahŕňa bezpečnostné tokeny nazývané tokeny na doručiteľa.

Názov „Autentifikácia na doručiteľa“ možno chápať ako „poskytnúť prístup nositeľovi tohto tokenu“. Token na doručiteľa, ktorý umožňuje prístup k určitému prostriedku alebo adrese URL, je s najväčšou pravdepodobnosťou tajuplný reťazec, ktorý obvykle generuje server ako odpoveď na žiadosť o prihlásenie.

Klient musí pri odosielaní žiadostí chráneným prostriedkom poslať tento token do hlavičky Autorizácia:
Autorizácia: Bearer & lttoken & gt

Schéma autentifikácie nosiča bola pôvodne vytvorená ako súčasť protokolu OAuth 2.0 v protokole RFC-6750, ale niekedy sa používa aj samostatne.

Podobne ako pri základnej autentifikácii, autentifikácia na doručiteľa by sa mala používať iba cez HTTPS (SSL).

2. Kľúče API

V prostredí REST API Security - kľúče API sa v priemysle často používajú a stali sa akýmsi štandardom, táto metóda by sa však nemala považovať za dobré bezpečnostné opatrenie.

Kľúče API boli vytvorené ako oprava skorých problémov s autentifikáciou základného overovania HTTP a iných takýchto systémov. V tejto metóde je každému prvému používateľovi priradená jedinečná vygenerovaná hodnota, čo znamená, že používateľ je známy. Keď sa používateľ pokúsi znova vstúpiť do systému, jeho jedinečný kľúč (niekedy vygenerovaný z ich hardvérovej kombinácie a údajov IP a inokedy náhodne vygenerovaný serverom, ktorý ho pozná) sa použije na preukázanie toho, že je rovnakým používateľom ako predtým .

Veľa kľúčov API sa posiela v reťazci dotazu ako súčasť adresy URL, čo uľahčuje ich vyhľadanie niekomu, kto by k nim nemal mať prístup. Do parametrov reťazca dotazu prosím nedávajte žiadne kľúče API ani citlivé informácie! Lepšou možnosťou je vložiť kľúč API do hlavičky Autorizácia. Toto je v skutočnosti navrhovaný štandard: Autorizácia: Apikey 1234567890abcdef.

V praxi sa však kľúče API zobrazujú na najrôznejších miestach:

  • Hlavička autorizácie
  • Základné overenie
  • Údaje tela
  • Vlastná hlavička
  • Reťazec dopytu

Existuje určite niekoľko platných dôvodov na použitie kľúčov API. V prvom rade Kľúče API sú jednoduché. Používanie jedného identifikátora je jednoduché a pre niektoré prípady použitia najlepšie riešenie. Napríklad, ak je API špecificky obmedzené funkčnosťou, kde je jediným možným príkazom „čítanie“, môže byť adekvátnym riešením kľúč API. Bez potreby úprav, úprav alebo mazania je bezpečnosť menej dôležitá.

Problém však je, že každý, kto požiada o službu, prenesie svoj kľúč a teoreticky ho možno tento kľúč vyzdvihnúť rovnako ľahko ako akýkoľvek sieťový prenos, a ak je ktorýkoľvek bod v celej sieti nezabezpečený, celý sieť je vystavená.

Ak máte do činenia s autentifikáciou v rozhraní REST API, zvážte vykonanie bezpečnostného testu, aby ste skontrolovali bežné chyby zabezpečenia.

3. OAuth (2.0)

Predchádzajúce verzie tejto špecifikácie, OAuth 1.0 a 1.0a, boli oveľa komplikovanejšie ako OAuth 2.0. Najväčšou zmenou v najnovšej verzii je, že už nie je potrebné podpisovať každý hovor pomocou hašovaného kľúča. Najbežnejšie implementácie protokolu OAuth namiesto toho používajú jeden alebo obidva tieto tokeny:

  • prístupový token: odoslané ako kľúč API, umožňuje aplikácii voliteľný prístup k údajom používateľa, platnosť prístupových tokenov môže vypršať.
  • obnovovací token: voliteľne súčasť toku OAuth, obnovovacie tokeny načítajú nový prístupový token, ak už vypršali. OAuth2 kombinuje autentizáciu a autorizáciu, aby umožnil sofistikovanejšiu kontrolu rozsahu a platnosti.

OAuth 2.0 je najlepšou voľbou na identifikáciu osobných používateľských účtov a udeľovanie správnych povolení. Pri tejto metóde sa používateľ prihlási do systému. Tento systém potom požiada o autentifikáciu, zvyčajne vo forme tokenu. Používateľ potom pošle túto požiadavku na autentifikačný server, ktorý túto autentifikáciu odmietne alebo povolí. Od tejto chvíle sa token poskytne používateľovi a potom žiadateľovi. Takýto token potom môže žiadateľ o kontrolu skontrolovať kedykoľvek nezávisle od používateľa a môže sa použiť v priebehu času s prísne obmedzeným rozsahom a vekom platnosti.

Toto je v zásade oveľa bezpečnejší a výkonnejší systém ako iné prístupy, hlavne preto, že umožňuje ustanovenie rozsahov, ktoré môžu poskytnúť prístup k rôznym častiam služby API, a keďže token je po určitom čase odvolaný - robí to oveľa ťažším na opätovné použitie útočníkmi.

Populárne toky OAuth 2.0

Toky (nazývané tiež typy grantov) sú scenáre, ktoré klient API vykoná, aby získal prístupový token z autorizačného servera.

OAuth 2.0 poskytuje niekoľko populárnych tokov vhodných pre rôzne typy klientov API:

  • Autorizačný kód - Najbežnejší tok, ktorý sa väčšinou používa pre serverové a mobilné webové aplikácie. Tento tok je podobný tomu, ako sa používatelia prihlásia do webovej aplikácie pomocou svojho účtu Facebook alebo Google.
  • Implicitné - Tento tok vyžaduje, aby klient získal prístupový token priamo. Je to užitočné v prípadoch, keď poverenia používateľa nemožno uložiť v kóde klienta, pretože k nim má ľahký prístup tretia strana. Je vhodný pre webové, desktopové a mobilné aplikácie, ktoré neobsahujú žiadne serverové komponenty.
  • Heslo vlastníka zdroja - Vyžaduje sa prihlásenie pomocou používateľského mena a hesla. Pretože v takom prípade budú poverenia súčasťou žiadosti, je tento tok vhodný iba pre dôveryhodných klientov (napríklad oficiálne aplikácie vydané poskytovateľom API).
  • Poverenie klienta - Tento tok, určený na autentizáciu medzi servermi, popisuje postup, keď klientská aplikácia koná vo vlastnom mene a nie v mene ľubovoľného jednotlivého používateľa. Vo väčšine scenárov tento tok poskytuje prostriedky, ktoré umožňujú používateľom špecifikovať svoje poverenia v klientskej aplikácii, aby mal prístup k zdrojom pod kontrolou klienta.

4. OpenID Connect

OpenID Connect je jednoduchá vrstva identity nad protokolom OAuth 2.0, ktorá umožňuje počítačovým klientom overiť totožnosť koncového používateľa na základe autentifikácie vykonanej autorizačným serverom, ako aj získať základné profilové informácie o koncovom používateľovi. interoperabilným spôsobom podobným REST.

Z technického hľadiska OpenID Connect špecifikuje RESTful HTTP API, pričom ako dátový formát používa JSON.

OpenID Connect umožňuje rade klientov, vrátane webových, mobilných a JavaScriptu klientov, požadovať a dostávať informácie o autentických reláciách a koncových užívateľoch. Sada špecifikácií je rozšíriteľná a podporuje voliteľné funkcie, ako je šifrovanie údajov o totožnosti, objav poskytovateľov OpenID a správa relácií.

OpenID Connect definuje tok prihlásenia, ktorý umožňuje klientskej aplikácii autentifikovať používateľa a získavať informácie (alebo „tvrdenia“) o danom používateľovi, napríklad meno používateľa, e-mail atď. Informácie o totožnosti používateľa sú zakódované v zabezpečenom webovom tokene JSON (JWT), ktorý sa nazýva ID token.

Webové tokeny JSON sú otvorenou priemyselnou štandardnou metódou RFC 7519
na bezpečné zastupovanie pohľadávok medzi dvoma stranami. JWT umožňuje
dekódujete, overíte a vygenerujete JWT. Zatiaľ čo JWT je to štandard
bol vyvinutý pomocou Auth0, identity riadenej API a autentifikácie
správcovská spoločnosť.

OpenID Connect definuje mechanizmus zisťovania s názvom OpenID Connect Discovery, kde server OpenID zverejňuje svoje metadáta na známej adrese URL, zvyčajne https://server.com/openid-configuration.

Táto adresa URL vracia zoznam JSON koncových bodov OpenID / OAuth, podporované rozsahy a deklarácie, verejné kľúče používané na podpis tokenov a ďalšie podrobnosti. Klienti môžu tieto informácie použiť na vytvorenie požiadavky na server OpenID. Názvy polí a hodnoty sú definované v špecifikácii OpenID Connect Discovery.

Schémy zabezpečenia OpenAPI

V špecifikácii OpenAPI sa na definovanie toho, aký druh bezpečnostného mechanizmu sa používa v rámci API, používajú bezpečnostné schémy API na definovanie toho, aké prostriedky API sú zabezpečené a čo to znamená.

V špecifikácii OpenAPI existuje niekoľko štandardných autentifikačných protokolov, z ktorých si môžete vybrať, každý s vlastnými silnými a slabými stránkami.

Základné overenie API
  • Ľahko implementovateľné, podporované takmer všetkými webovými servermi
  • Podporuje odosielanie používateľských mien a hesiel zakódovaných na základňu 64
  • Nemalo by sa používať bez SSL
  • Dá sa ľahko kombinovať s inými bezpečnostnými metódami

Poznámka: základné autentifikácia je veľmi zraniteľná voči únosom a útokom typu man-in-the-middle, keď sa nepoužíva šifrovanie. Kvôli tomuto obmedzeniu sa tento spôsob autentifikácie odporúča iba pri spárovaní s SSL.

OAuth1.0 (schéma súhrnu)
  • Populárny, testovaný, bezpečný, s podpisom, dobre definovaný protokol
  • Používa kryptografický podpis, ktorý je kombináciou tokenového tajomstva, nonce a ďalších informácií založených na požiadavke
  • Môže byť použitý s alebo bez SSL
OAuth2 (schéma tokenov na doručiteľa)
  • Aktuálna špecifikácia OAuth2 eliminuje potrebu kryptografických podpisov, hesiel a používateľských mien
  • OAuth2 pracuje so scenármi autentifikácie nazývanými toky, tieto toky zahŕňajú:
    • Tok autorizačného kódu
    • Implicitný tok
    • Tok hesla vlastníka zdroja
    • Tok poverení klienta
    OpenID Connect Discovery
    • Založené na protokole OAuth 2.0
    • Používa postup prihlásenia, ktorý umožňuje overenie používateľa a prístup k informáciám pomocou klientskej aplikácie
    • Informácie o používateľovi sú kódované prostredníctvom zabezpečeného webového tokenu JSON (JWT)

    Vývojová platforma RestCase umožňuje vizuálne definovať tieto schémy zabezpečenia, čo umožňuje vytvoriť a definovať celé API bez akýchkoľvek znalostí kódovania.

    Neváhajte a pripojte sa k našej beta verzii, jednoducho sa zaregistrujte a začnite vytvárať API - je to zadarmo!

    Zhrnutie

    Zatiaľ je jasným víťazom týchto štyroch metód OAuth 2.0. Existujú prípady použitia, v ktorých môžu byť vhodné kľúče API alebo metódy autentifikácie HTTP, a nové pripojenie OpenID je čoraz populárnejšie, hlavne preto, že je založené na už populárny OAuth 2.0.

    OAuth 2.0 prináša množstvo výhod, od jednoduchého použitia až po modul federovaného systému, a čo je najdôležitejšie ponúka škálovateľnosť zabezpečenia - poskytovatelia môžu momentálne hľadať iba autentifikáciu, ale majú systém, ktorý okrem upečeného systému natívne podporuje aj silnú autorizáciu. -v metódy autentifikácie je veľmi cenné a z dlhodobého hľadiska znižuje náklady na implementáciu.

    Guy Levin

    Zdieľaj tento príspevok

    Prihláste sa na odber rozhrania REST API a ďalších

    Získajte najnovšie príspevky doručené priamo do vašej doručenej pošty.

    alebo sa prihláste na odber pomocou RSS pomocou služby Feedly!


    Vytvorte si vlastné vlny

    Študenti používajú interaktívny nástroj na vytváranie vlastných vĺn.

    Veda o Zemi, Geografia, Fyzická geografia

    1. Poskytnite študentom kľúč.
    Write the following key on the board for students to refer to as they complete the activity:
    crest = top of wave
    wave trough = lowest point between each crest
    wave height = distance between crest and trough
    wavelength = distance from crest to crest or trough to trough

    2. Have students experiment with creating waves of different sizes.
    Have students use the Wave Simulator interactive to shape waves and see how they affect a boat at rest, in an area with no current. Model for students how to adjust the wave height, wavelength, and wave period and how to recognize how those changes affect the waves and boat. Then have students use the interactive in pairs.

    3. Have students reflect on their experience.
    First, ask pairs to describe how they used the interactive. Then ask: What did you have to change to make the waves bigger? Smaller? Faster? Slower? What did you have to change to make lots of waves? A few?


    6 odpovedí 6

    Answering my own question in case it helps somebody.

    As mentioned in comment by @SharePointer you need to register an app in Azure AD in order to authenticate against it. That app that you register needs to be given permissions to your SharePoint Online.

    Login to Azure Portal at https://portal.azure.com that is used by your O365 Tenant where you want to access the SharePoint site.

    Find "App Registrations" in the menu.

    Select "New App Registration".

    Once it is registered note the Application ID and copy it to notepad.

    • Go to Required Permissions in the application you just registered.
    • Select SharePoint Online under the Select an API in step 1.
    • Then under 2 Select Permissions, choose "Have full control of all site collections".

    Now choose KEYS blade and add a key. The key only shows once when you save it. Copy it to notepad.

    • Go to POSTMAN app on your desktop.
    • Create a new request. For example, https://mytenantname.sharepoint.com/sites/mysitecollection/_api/web/lists

    Set a header of "Accept: application/json odata=verbose"

    Go to the Authorization tab in POSTMAN.

    Fill out the fields in that dialog like below:

    Click Request Token button.

    At this point you should login with an admin user. You will also be asked to allow the permissions you set on the Application in Azure AD. This is why you need to log in as an Admin account. Accept the permissions request when asked.

    The token is returned. Copy it to notepad and then click the "Use Token" button. This fills in the token to the correct place in POSTMAN.

    Now Send your request and you should have a successful returned JSON list of lists.

    [EDIT]
    In addition to above I have found that I need to create a certificate in order to authenticate. Just registering the app and giving permissions was not enough.

    To do this check out the makecert command in a Visual Studio Developer command prompt. Example below:


    Introduction to Population

    Students learn what population means, discuss crowding and why some areas are more crowded than others, and compare and contrast living in crowded and uncrowded places.

    Geography, Human Geography

    1. Introduce the term population and discuss crowding.
    Introduce the term population. Tell students that population is the whole number of people living in an area, such as a town or city. Ask: What happens when more people live in the same amount of space? Provide students with the following example: In the middle of the school year, many more students join their classroom. Ask: What changes would we have to make? Encourage students to think about where new students would sit, how much noisier it would be, and any other changes they can think of.

    2. Explain why some areas are more crowded than others.
    Explain that people live in large numbers in some places and in small numbers in other places. Tell students that the reasons why include access to:

    Ask: What other reasons can you think of?

    3. Conduct a brief simulation.

    Direct the majority of the class into a small area of the classroom and allow three students to “claim” the rest of the classroom for themselves. Once students have taken their places, ask them to be as quiet as possible and to make silent observations on their current situation. Then ask: What do you notice? Ask students in the crowded area to share observations. Then ask students in the uncrowded area to share theirs.

    4. Compare and contrast living in crowded and uncrowded places.

    Have students return to their regular places in the classroom. Ask them to describe what they think it would be like to live in a place that's very crowded. Ask: What’s good about living in a crowded place? What’s not good about it?

    Informal Assessment

    Have students draw pictures of themselves and crowded and uncrowded parts of their town or school. The pictures should illustrate activities they would do in both areas. Discuss students’ drawings. Ask: What is good about being in the place you drew? What is bad?

    Extending the Learning

    If available, have students examine a map of their local city or county and compare and contrast living in the crowded and uncrowded areas. Then give students copies of the world map. Have them find and mark the ten countries with the most people, currently:

    • Čína
    • India
    • Spojené štáty
    • Indonézia
    • Brazília
    • Pakistan
    • Bangladesh
    • Nigéria
    • Russia
    • Japonsko

    Ask: Would you like to live in one of the countries? Ask students to think about how their lives would be different in a country with a larger population. Make sure students take into account the varying sizes of the countries. Ask: What happens when more people live in the same amount of space?


    Troubleshooting issues with Swagger UI

    When you’re setting up Swagger UI, you might run into some issues. The following issues are the most common:

    CORS issues:

    If you have security correctly configured, but the requests are rejected, it could be due to a CORS (cross-origin resource sharing) issue. CORS is a security measure that websites implement to make sure other scripts and processes cannot take their content through requests from remote servers. See CORS Support in Swagger UI’s documentation for details.

    If the requests aren’t working, open your browser’s JavaScript console when you make the request and see if the error relates to cross-origin requests. If this is the error, ask your developers to enable CORS on the endpoints. (To open the JavaScript Console, on Chrome on a Mac, go to View > Developer > Javascript Console on Windows, click the menu button (vertical ellipses) and go to More tools > Developer tools. Then click the Konzola tab.)

    Host URL issues:

    The host for your test server might be another reason that requests are rejected. Some APIs (like Aeris Weather) require you to create an App ID that is based on the host URL where you’ll be executing requests. If the host URL you registered is http://mysite.com , but you’re submitting the test from https://editor.swagger.io/ , the API server will reject the requests.

    If you need help, the Swagger Google Group is a helpful resource for troubleshooting.