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



26.08.2021

Firma Fortinet rozszerzyła...

Firma Fortinet rozszerzyła ofertę o usługę FortiTrust, która dołączyła do innych usług...
26.08.2021

Aplikacje biznesowe

Ready_™ AppStore
26.08.2021

Automatyzacja chmur...

Integracja z Red Hat Ansible
26.08.2021

Backup kodu źródłowego

GitProtect.io dostępny na Github
26.08.2021

Wsparcie pracy hybrydowej

Zdalny SD WAN
26.08.2021

Nowy monitor Philips 498P9Z

Nowy monitor Philips 498P9Z to model wyposażony w 49-calowy, zakrzywiony panel VA o...
26.08.2021

Wytrzymały punkt dostępowy

D-Link DIS-2650AP
26.08.2021

Ekonomiczne dyski

SSD bez DRAM
26.08.2021

Petabajty pojemności

Serwery QNAP

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"