Ověřování žádostí o webové služby s nástrojem PowerShell

Nedávno jsem přednášel o používání služby PowerShell pro přístup k webovým službám a pokrýval některé věci, které jsem v tomto sloupci diskutoval v posledních několika měsících, když se mě někdo zeptal: "Jaký typ šifrování a autentizace využívají webové služby?" Musím přiznat, že na okamžik jsem neměl odpověď. Ta otázka probudila část mé mozky "Bezpečnostní mechanika systému Windows", která vyšla na všech polích. Ale pak se probudili někteří jiní neuroni a já jsem si vzpomněl na odpověď. Takže jsem odpověděla na něco jako: "Totéž, co používáte po celou dobu na Web-SSL, ID uživatele a hesla."

Nastavení kanálu SSL ve službě PowerShell pomocí invoke-webrequest or invoke-restmethod je stejně jednoduché jako předpony URI https místo http, a samozřejmě pár veřejných / soukromých klíčů v certifikátu SSL je mnohem bezpečnější než jakékoliv heslo. Při použití úrovně zabezpečení, která může používat tlačítka až na délku 4,096 bitů, se stane všudypřítomným a jednoduchým způsobem jako dýchání vzduchu, budete si moci vyměňovat uživatelské ID a hesla přímo na šifrovaném kanálu (a ano, vím, kvantové výpočty vyvede konec certifikátů a západní civilizace, ale hádám, že se to ještě chvíli nestane.)

Takže vše, co musíte udělat pro uspokojení většiny webových služeb, je buď vůbec nic (jako u mnoha veřejných služeb), nebo jednoduše získat klíč nebo pár uživatelských klíčů. (Všimněte si, že klíč nebo - jak je stále více odkazováno na - tajný je v podstatě jen nahrazením hesla.) Už jsme viděli jeden příklad toho když jsem ukázal, jak požádat Bing, aby vyhledal město / oblast / stát pro PSČ. Služba je snadná k dotazování, nejprve však vyžaduje, abyste požádali společnost Microsoft o klíč, aby společnost dokázala sledovat, kolik vyhledávacích dotazů provádíte.

V případu Bing jsem potřeboval pouze vložit klíč do adresy URL požadavku (což, udělena, není chráněna SSL, ale to je to, jak to Microsoft chce), ale v některých případech se musím trochu chytřeji a postavte jej do hlavičky HTTP, která is chráněné pomocí připojení SSL. Zde je postup.

V předchozích příkladech jste viděli, že Národní úřad pro oceán a atmosféru (NOAA) nabízí celou řadu zajímavých geofyzikálních datových souborů. Většina z nich nevyžaduje ID uživatele a klíče, ale NOAA Národní datové centrum pro změnu klimatu (NCDC) dělá. Jeho služba je RESTful a poskytuje přehled o tom, jak přistupovat k službě a kde lze požádat o klíč, který volá a známka.

NCDC má mnoho datasetů, ale jeden z nejzajímavějších má ID GHCND, což je zkratka pro Globální historická klimatologická síť - denní shrnutí. Můžete si vyžádat denní souhrny pro libovolný rozsah dat v rámci daného PSČ s takovouto adresou URL:

                              https://www.ncdc.noaa.gov/cdo-web/api/v2/data?datasetid=<DSetID>&locationid=ZIP:<zipcode>&startdate=<dstart>&enddate=&<dend>

Chcete-li například vyhledat souhrn pro únor 10, 2016 v poštovním směrovacím čísle 23456, použijte tuto adresu URL:

                              https://www.ncdc.noaa.gov/cdo-web/api/v2/data?datasetid=GHCND&locationid=ZIP:23456&startdate=2016-02-10&enddate=2016-02-10

Nyní můžete pravděpodobně sestavit několik PowerShell rutin, aby NCDC vrátil tento souhrn, ale an invoke-webrequest or invoke-restmethod by se nezdařilo s chybou 400: Je požadován parametr tokenu. Předpokládejme tedy, že jste požádali a získali token z adresy NCDC citované dříve a jeho hodnota byla XYZ. (Nebylo by to, protože klíče jsou poměrně dlouhé.) Aby NCDC splnila vaši žádost, musí vaše žádost obsahovat tento text v hlavičce HTTP:

                              token = XYZ

Invoke-webrequest a invoke-restmethod oba mají -záhlaví parametr, který přijímá tabulku hash dvojic názvů / hodnot, takže můžete vytvořit takovouto podobu:

                              [email protected]{token="XYZ"}

Můžete to projít jen tak -záhlaví $ HeaderPairs. Dej to dohromady a vy přijdeš něco takového:

[Email chráněn]{token = 'XYZ'}
$URI = ‘https://www.ncdc.noaa.gov/cdo-web/api/v2/data?datasetid=GHCND&locationid=ZIP:23456&startdate=2016-02-10&enddate=2016-02-10’
$ výsledek = irm ​​$ URI -headers $ HeaderPairs

Protože jste použili invoke-restmethod spíše než invoke-webrequest, výsledky byly již de-JSONed do objektu PowerShell s atributem výsledky, tak zadejte následující výsledky:

                              $ result.results

Zobrazí se osm datových bloků, které vypadají takto:

date : 2016-02-10T00:00:00
datový typ: TMAX
stanice: GHCND: USC00440385
atributy: ,, H,
hodnota: 94

Zajímavé jsou části datový typ, která identifikuje daný datový soubor (TMAX je nejvyšší naměřená hodnota v den, a nejnižší naměřená hodnota TMIN) a hodnota, který je -6 pro TMIN a 94 pro TMAX. Ano, to je velký rozsah, ale obě čísla jsou teplota Celsia v desetinách stupňů, takže nejnižší byl -0.6 C a nejvyšší byl 9.4 C, o stupních 31 a stupních 49 Fahrenheita.

Chcete-li zabalit, mnoho webových služeb nepotřebuje ověření, ale ty, které budou obvykle potřebovat něco tak jednoduchého jako klíč nebo snad pár uživatelských ID / klíčů. Mnoho služeb dalo klíč do adresy URL, ale ty, které mají své "hlavičky" rovně, tak to mluvit, mnoho toho potřebují v záhlaví a teď víte, jak to předat v PowerShell. (A nezapomeňte použít https v URL!) Uvidíme se příští měsíc.

Napsat komentář