Strona korzysta z plików cookies w celu realizacji usług i zgodnie z Polityką Plików Cookies.



01.12.2022

Wyższy poziom programowania

Progress oferuje nowe narzędzia programistyczne: Progress Telerik, Progress Kendo UI i...
01.12.2022

Łączność w podróży

VMware SD-WAN VMware zaprezentował rozwiązanie SD-WAN nowej generacji, w tym nowego...
01.12.2022

Bezpieczne e-maile

Nowa aplikacja firmy Cypherdog Security Inc. umożliwia bezpieczną wymianę maili i...
01.12.2022

Pierwszy w branży

Schneider Electric wprowadza na rynek APC Smart-UPS Ultra. To pierwszy w branży...
01.12.2022

Przełączniki 10G dla MŚP

Nowe urządzenia to przełączniki 10G kompatybilne z systemem Omada SDN.
01.12.2022

Zarządzanie danymi

Firma Synology wprowadziła na rynek czterokieszeniowy DiskStation DS923+.
01.12.2022

Nowatorski system chłodzenia

OVHcloud zaprezentował nową, autorską technologię hybrydowego zanurzeniowego chłodzenia...
01.12.2022

Linia smart routerów

D-Link zaprezentował najnowszą rodzinę routerów Smart Wi-Fi z algorytmami sztucznej...
04.11.2022

Nowa platforma Red Hat

Nowa platforma Red Hat Enterprise Linux (RHEL) w wersjach 8.7 i 9.1 Beta obsługuje...

PowerShell Universal – API

Data publikacji: 01-04-2021 Autor: Bartosz Bielawski

W pierwszej części cyklu przyjrzeliśmy się temu, jak możemy skonfigurować PowerShell Universal i jakie możliwości oferuje ta platforma. W kontynuacji przyjrzymy się jednej z trzech funkcji dostępnych w ramach PowerShell Universal, a mianowicie Universal API.

 

Oprócz omówienia tego, jak możemy konfigurować końcówki REST, przyjrzymy się także temu, jak wykorzystać dostępną w ramach płatnej wersji możliwość tworzenia końcówek wymagających uwierzytelnienia i autoryzacji. Omówimy też, jak wykorzystać swagger API do tworzenia, usuwania i modyfikowania naszych końcówek.


> POLECENIA I PARAMETRY


Do tworzenia końcówki REST w ramach PowerShell Universal korzystać będziemy z polecenia New-PSUEndpoint. Polecenie to można wykorzystać albo w pliku definiującym końcówki (endpoints.ps1), albo z użyciem parametru ComputerName w celu tworzenia ich zdalnie. W drugim przypadku wykorzystywany będzie swagger API, do którego jeszcze wrócimy.


W obu przypadkach możemy skonfigurować następujące parametry:

 

  • Url odpowiedzialny za adres, pod którym dostępne będzie API;
  • Method określający metodę REST, którą oferuje dana końcówka;
  • Endpoint, czyli blok skryptu określający zachowanie naszej końcówki;
  • Authentication: określa, czy końcówka wspiera uwierzytelnianie i autoryzację;
  • oraz Role definiujący rolę, którą musi posiadać użytkownik, by móc skorzystać z końcówki.


Jeśli korzystać będziemy z tego polecenia zdalnie, to skorzystać musimy również z pozostałych parametrów:

 

  • ComputerName do określania adresu, pod którym działa swagger API;
  • AppToken, czyli żetonu wygenerowanego w ramach PowerShell Universal;
  • ErrorAction określającego zachowanie końcówki, gdy w trakcie wykonywania kodu pojawią się błędy.

 

> TWORZENIE ŻETONU


Jak wygenerować wspomniany powyżej żeton? Skorzystać możemy z panelu administracyjnego PowerShell Universal lub znów – swagger API. Zajmijmy się najpierw opcją wykorzystującą PowerShella. Aby wygenerować żeton, musimy skorzystać z polecenia Invoke-RestMethod. Skorzystamy przy tym z przeznaczonej do tego końcówki:


Invoke-RestMethod -Uri http://psu.contoso.com/api/v1/apptoken/grant `
-UseDefaultCredentials
id : 1
token : (...)
identity : @{id=3; name=contosobartek; source=0; role=; roleName=}
revoked : False
role : Reader, Administrator, Default
created : 2021-01-28T18:23:19.595+01:00
expiration : 2022-01-28T18:23:19.595+01:00
revokedDate : 0001-01-01T00:00:00


Aby zobaczyć listę końcówek, musimy skorzystać z uzyskanego żetonu:


$żeton = Invoke-RestMethod -Uri http://psu.contoso.com/api/v1/apptoken/1
Get-PSUEndpoint -ComputerName http://psu.contoso.com -AppToken $żeton.Token


Co ciekawe, z tego samego żetonu możemy skorzystać, aby wygenerować kolejny, uzyskać listę wszystkich wygenerowanych żetonów, czy też w celu usunięcia lub dezaktywowania obiektu tego typu, jeśli na przykład podejrzewamy, że wpadł on w niepowołane ręce:


Grant-PSUAppToken -AppToken $zeton.Token -Role Default -ComputerName `
http://psu.contoso.com -IdentityName Test
$drugiŻeton = Get-PSUAppToken -Id 2 -AppToken $zeton.Token `
-ComputerName http://psu.contoso.com
Revoke-PSUAppToken -AppTokenToRevoke $drugiŻeton -AppToken $żeton.Token `
-ComputerName http://psu.contoso.com


Warto zwrócić uwagę na format przekazywany do parametru ComputerName. Wbrew nazwie akceptuje on nie tylko nazwę komputera (która wystarcza jedynie wtedy, gdy nasz PowerShell Universal operuje na domyślnym porcie 5000), ale również kompletny link do strony, w ramach której konfigurujemy PowerShell Universal. Jeśli więc na przykład skorzystamy z portu innego niż domyślny i skonfigurujemy naszą stronę tak, by korzystała z połączenia za pomocą HTTPS, to uruchomimy wszelkie polecenia z modułu Universal, podając właśnie ten precyzyjny link jako wartość parametru ComputerName:


Get-PSUEndpoint -ComputerName https://psu.contoso.com:1234 `
-AppToken $żeton.Token

 

Od wersji 1.5.9 możemy też skorzystać z aliasu (Uri), który jednoznacznie wskazuje na to, że parametr ten wspiera nie tylko samą nazwę komputera. Gdy dysponujemy już żetonem, możemy zacząć tworzyć końcówki na naszym serwerze przy pomocą polecenia New-PSUEndpoint:


$parametry = @{
ComputerName = 'http://psu.contoso.com'
AppToken = $żeton.Token
Url = '/test'
Method = 'GET'
Endpoint = { 'test' }
Authentication = $false
ErrorAction = 'Stop'
}
New-PSUEndpoint @parametry
Id : 1
Url : /test
Method : GET
ScriptBlock :
'test'

Authentication : False
Role :
RegEx : False
ErrorAction : Stop


Nie wymagamy uwierzytelniania, więc nasza końcówka działać będzie bez podawania użytkownika i hasła i zwróci ciąg znaków test:


Invoke-RestMethod -Uri http://psu.contoso.com/test
test
Podobny efekt można uzyskać, korzystając bezpośrednio ze swagger API. W tym przypadku musimy jednak sami skomponować przekazywane do metody POST ciało:
$ciało = @{
Url = '/drugiTest'
Method = 'GET'
ScriptBlock = ' "drugiTest" '
ErrorAction = 1
} | ConvertTo-Json
$nagłówek = @{
Authorization = "Bearer $($żeton.Token)"
}
$parametry = @{
Method = 'Post'
Uri = 'http://psu.contoso.com/api/v1/endpoint'
Body = $ciało
Headers = $nagłówek
ContentType = 'application/json'
}
Invoke-RestMethod @parametry


Do połączenia się z tym API nie trzeba oczywiście korzystać z żetonu. Jeśli Windows Authentication jest skonfigurowana poprawnie, to możemy też użyć domyślnych poświadczeń (UseDefaultAuthentication). Wszystko to przy założeniu, że konto, z którego aktualnie korzystamy, ma odpowiednie uprawnienia w PowerShell Universal.

 

[...]

 

Autor zawodowo zajmuje się informatyką. Jest Microsoft MVP w dziedzinie PowerShella, blogerem oraz jednym z moderatorów forum dotyczącego skryptów w serwisie TechNet. Autor książki „Windows PowerShell 5.1 Biblia”.

Pełna treść artykułu jest dostępna w papierowym wydaniu pisma.

.

Transmisje online zapewnia: StreamOnline

All rights reserved © 2019 Presscom / Miesięcznik \"IT Professional\"