{"id":30971,"date":"2023-06-22T13:24:13","date_gmt":"2023-06-22T11:24:13","guid":{"rendered":"https:\/\/nearshore-it.eu\/artykuly\/usluga-azure-active-directory\/"},"modified":"2024-11-07T13:54:54","modified_gmt":"2024-11-07T12:54:54","slug":"usluga-azure-active-directory","status":"publish","type":"post","link":"https:\/\/nearshore-it.eu\/pl\/artykuly\/usluga-azure-active-directory\/","title":{"rendered":"Us\u0142uga Azure Active Directory w aplikacjach multi-tenant"},"content":{"rendered":"\n<div class=\"table-of-contents\">\n    <p class=\"title\">PRZEJD\u0179 DO:<\/p>\n    <ol>\n                    <li><a href=\"#Active-Directory?-\">1.  Czym jest us\u0142uga Azure Active Directory? <\/a><\/li>\n                    <li><a href=\"#-multi-tenant?-\">2.  Czym jest aplikacja multi-tenant? <\/a><\/li>\n                    <li><a href=\"#\u0142ug\u0105-Azure-AD\">3.  Rozpocznij prac\u0119 z us\u0142ug\u0105 Azure AD <\/a><\/li>\n                    <li><a href=\"#Rejestrowanie-aplikacji-multi-tenant-\">4.  Rejestrowanie aplikacji multi-tenant <\/a><\/li>\n                    <li><a href=\"#Logowanie-do-aplikacji-jako-u\u017cytkownik-zewn\u0119trznyu002du002d\">5.  Logowanie do aplikacji jako u\u017cytkownik zewn\u0119trzny  <\/a><\/li>\n                    <li><a href=\"#Aplikacja-multi-tenant-wywo\u0142uj\u0105ca-wewn\u0119trzne-API-\">6.  Aplikacja multi-tenant wywo\u0142uj\u0105ca wewn\u0119trzne API <\/a><\/li>\n                    <li><a href=\"#Zarz\u0105dzanie-to\u017csamo\u015bciami-\u2013-ograniczanie-dost\u0119pu-do-aplikacji-\">7.  Zarz\u0105dzanie to\u017csamo\u015bciami \u2013 ograniczanie dost\u0119pu do aplikacji <\/a><\/li>\n                    <li><a href=\"#Us\u0142uga-Azure-AD-od-Microsoft-\u2013-podsumowanie-\">8.  Us\u0142uga Azure AD od Microsoft \u2013 podsumowanie <\/a><\/li>\n            <\/ol>\n<\/div>\n\n\n<p>Zarz\u0105dzanie dost\u0119pami do aplikacji jest zagadnieniem poruszanym w przypadku niemal ka\u017cdego systemu. Dbaj\u0105c o odpowiednie uwierzytelnianie, nie tylko ograniczamy mo\u017cliwo\u015bci pozyskania czy modyfikowania wra\u017cliwych danych, ale mamy r\u00f3wnie\u017c wi\u0119ksz\u0105 elastyczno\u015b\u0107 w przypadku tzw. User Experience, poprzez definiowanie r\u00f3l czy w\u0142a\u015bciwo\u015bci zwi\u0105zanych z danym u\u017cytkownikiem.&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Active-Directory?-\">Czym jest us\u0142uga Azure Active Directory?&nbsp;<\/h2>\n\n\n\n<p><strong>Azure Active Directory (AAD)<\/strong> jest serwisem chmurowym firmy Microsoft pozwalaj\u0105cym na zarz\u0105dzanie dost\u0119pami i to\u017csamo\u015bciami. Korzystaj\u0105c z tego rozwi\u0105zania, mo\u017cemy r\u00f3wnie\u017c rejestrowa\u0107 nasze aplikacje i okre\u015bla\u0107 zasady dost\u0119pno\u015bci. Przy czym rozwa\u017camy tutaj zar\u00f3wno dost\u0119py u\u017cytkownik\u00f3w, jak i innych aplikacji. Do zarejestrowanego rozwi\u0105zania w danej dzier\u017cawie (<strong>z ang. tenant<\/strong> ) dost\u0119p mog\u0105 mie\u0107 wszystkie obiekty (u\u017cytkownicy, aplikacje) j\u0105 wsp\u00f3\u0142dziel\u0105ce. AAD pozwala r\u00f3wnie\u017c na \u201eudost\u0119pnianie\u201d aplikacji innym najemcom, dzi\u0119ki czemu nie musimy martwi\u0107 si\u0119 o zarz\u0105dzanie u\u017cytkownikami zewn\u0119trznymi naszej aplikacji. Tak skonfigurowane rozwi\u0105zanie nazywamy <a href=\"https:\/\/nearshore-it.eu\/pl\/artykuly\/multi-tenant-czy-single-tenant\/\" target=\"_blank\" rel=\"noreferrer noopener\">multi-tenantowym.<\/a>&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"-multi-tenant?-\">Czym jest aplikacja multi-tenant?&nbsp;<\/h2>\n\n\n\n<p>Aplikacja typu multi-tenant<strong> pozwala obs\u0142ugiwa\u0107 wielu dzier\u017cawc\u00f3w poprzez jedn\u0105 instancj\u0119<\/strong>. Przy tego typu rozwi\u0105zaniach istotne jest, aby klient nie mia\u0142 dost\u0119pu do danych nale\u017c\u0105cych do innych najemc\u00f3w. Jest to najcz\u0119\u015bciej rozwi\u0105zywane poprzez logik\u0119 biznesow\u0105 lub rozdzielenie baz danych tak, aby ka\u017cdy klient mia\u0142 w\u0142asn\u0105.&nbsp;<\/p>\n\n\n\n<p>Aplikacja wielodost\u0119powa zarejestrowana w Azure Active Directory pozwala przenie\u015b\u0107 zarz\u0105dzanie u\u017cytkownikami i okre\u015blanie poziomu dost\u0119pu do rozwi\u0105zania na barki administratora danego dzier\u017cawcy. Zmniejsza to koszty zwi\u0105zane z utrzymywaniem u\u017cytkownik\u00f3w po stronie dostawcy us\u0142ugi.&nbsp;&nbsp;<\/p>\n\n\n\n<p>Nale\u017cy jednak pami\u0119ta\u0107, \u017ce kwestia dost\u0119pu do poszczeg\u00f3lnych element\u00f3w aplikacji jest dalej rozwi\u0105zywana przez programist\u00f3w poprzez definiowanie odpowiednich polityk w kodzie.&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"\u0142ug\u0105-Azure-AD\">Rozpocznij prac\u0119 z us\u0142ug\u0105 Azure AD<\/h2>\n\n\n\n<p>Firma Microsoft udost\u0119pnia administratorom materia\u0142y niezb\u0119dne do zarz\u0105dzania us\u0142ugami w Azure Portalu.&nbsp; Dokumentacja zawiera te\u017c odpowiedzi na cz\u0119sto zadawane pytania. Wszelkie informacje s\u0105 dost\u0119pne na stronie <a href=\"https:\/\/learn.microsoft.com\/en-us\/azure\/active-directory\/fundamentals\/active-directory-whatis\" target=\"_blank\" rel=\"noreferrer noopener\">Microsoft Azure Active Directory,<\/a> \u202fgdzie mo\u017cna si\u0119 dowiedzie\u0107 wszystkiego na temat zarz\u0105dzania to\u017csamo\u015bci\u0105 i dost\u0119pami w chmurze. Je\u017celi jeszcze nie korzystasz z us\u0142ug Microsoft Azure, warto zacz\u0105\u0107 w\u0142a\u015bnie w tym miejscu.&nbsp;&nbsp;&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Rejestrowanie-aplikacji-multi-tenant-\">Rejestrowanie aplikacji multi-tenant&nbsp;<\/h2>\n\n\n\n<p>Podczas rejestracji nowej aplikacji jeste\u015bmy zobligowani do wybrania, jakiego rodzaju konta chcemy wspiera\u0107. Wybieraj\u0105c opcj\u0119 zaznaczon\u0105 poni\u017cej, dajemy mo\u017cliwo\u015b\u0107 dost\u0119pu innym dzier\u017cawcom. Je\u017celi mamy w\u0105tpliwo\u015bci, kt\u00f3r\u0105 opcj\u0119 wybra\u0107, pod sekcj\u0105 znajduje si\u0119 link z kr\u00f3tkim opisem, na co zezwala ka\u017cda z nich.&nbsp;<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" src=\"https:\/\/nearshore-it.eu\/wp-content\/uploads\/2024\/09\/blog_2023.05.31_graphic_1.png\" alt=\"azure active directory \" class=\"wp-image-8744\" title=\"\"><\/figure>\n<\/div>\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Zarejestrowanie obiektu aplikacji powoduje utworzenie aplikacji biznesowej, a dok\u0142adniej jednostki us\u0142ugi (z ang. Service Principal). To w\u0142a\u015bnie do jednostki us\u0142ugi s\u0105 podpinane dost\u0119py u\u017cytkownika do aplikacji. Dok\u0142adnie ten sam mechanizm jest wykorzystywany w przypadku zewn\u0119trznych klient\u00f3w.&nbsp;<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" src=\"https:\/\/nearshore-it.eu\/wp-content\/uploads\/2024\/09\/blog_2023.05.31_graphic_2.png\" alt=\"azure active directory \" class=\"wp-image-8746\" title=\"\"><\/figure>\n<\/div>\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Logowanie-do-aplikacji-jako-u\u017cytkownik-zewn\u0119trzny--\">Logowanie do aplikacji jako u\u017cytkownik zewn\u0119trzny&nbsp;&nbsp;<\/h2>\n\n\n\n<p>Przy pierwszej pr\u00f3bie logowania do aplikacji jeste\u015bmy poproszeni o udzielenie zgody dla danej aplikacji. W zale\u017cno\u015bci od ustawie\u0144 dzier\u017cawcy b\u0119dziemy mogli sami jej udzieli\u0107 lub b\u0119dzie ona wymaga\u0142a zatwierdzenia przez administratora.&nbsp;&nbsp;<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img decoding=\"async\" src=\"https:\/\/nearshore-it.eu\/wp-content\/uploads\/2024\/09\/blog_2023.05.31_graphic_3-1.png\" alt=\"azure active directory\" class=\"wp-image-8751\" style=\"width:762px;height:573px\" title=\"\"><\/figure>\n<\/div>\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Warto nadmieni\u0107, \u017ce administrator udziela zgody dla wszystkich u\u017cytkownik\u00f3w, przez co tylko pierwsze logowanie do aplikacji jakimkolwiek u\u017cytkownikiem b\u0119dzie wywo\u0142ywa\u0107 pro\u015bb\u0119 o udzielenie uprawnie\u0144.&nbsp;&nbsp;<\/p>\n\n\n\n<p>Przy samoakceptacji (<strong>self-consent<\/strong>) b\u0119dzie ona wywo\u0142ywana indywidualnie dla ka\u017cdego u\u017cytkownika przy pierwszej pr\u00f3bie logowania.&nbsp;<\/p>\n\n\n\n<p>Tu u niekt\u00f3rych z was mog\u0105 pojawi\u0107 si\u0119 obawy: czy zezwalaj\u0105c na dost\u0119p do danych u\u017cytkownika, przydzielamy go dostawcy, u kt\u00f3rego aplikacja zosta\u0142a zarejestrowana? Spokojnie, nie do ko\u0144ca tak jest. Podobnie jak w przypadku dzier\u017cawcy pierwotnego tworzona jest jednostka us\u0142ugi jako aplikacja biznesowa, i to w zale\u017cno\u015bci od ustawionych dost\u0119p\u00f3w wzgl\u0119dem niej nasze rozwi\u0105zanie pozyskuje informacje o aktualnie zalogowanym u\u017cytkowniku.&nbsp;<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" src=\"https:\/\/nearshore-it.eu\/wp-content\/uploads\/2024\/09\/blog_2023.05.31_graphic_4.png\" alt=\"azure active directory \" class=\"wp-image-8759\" title=\"\"><\/figure>\n<\/div>\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Gdy DevOps lub in\u017cynier rejestruje aplikacj\u0119 i chce, aby logowano si\u0119 do niej przez Microsoft, docelowa aplikacja z docelowymi dost\u0119pami u\u017cywanymi przy logowaniu utworzy si\u0119 automatycznie podczas rejestracji. Nie ma w\u00f3wczas potrzeby, by u\u017cytkownicy wyra\u017cali zgod\u0119 dla aplikacji w tej dzier\u017cawie.&nbsp;<\/p>\n\n\n\n<p><strong>Przeczytaj tak\u017ce: <\/strong><a href=\"https:\/\/nearshore-it.eu\/pl\/artykuly\/wprowadzenie-do-swiata-azure-iot\/\">Czym jest Azure IoT? Jakie daje mo\u017cliwo\u015bci? Jaki jest koszt us\u0142ug i\u00a0gdzie zdoby\u0107 niezb\u0119dn\u0105 wiedz\u0119?<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Aplikacja-multi-tenant-wywo\u0142uj\u0105ca-wewn\u0119trzne-API-\">Aplikacja multi-tenant wywo\u0142uj\u0105ca wewn\u0119trzne API&nbsp;<\/h2>\n\n\n\n<p>Cz\u0119sto, zw\u0142aszcza w przypadku mikroserwis\u00f3w, zdarza si\u0119, \u017ce nasza aplikacja komunikuje si\u0119 z inn\u0105 poprzez jej API. Kiedy dzieje si\u0119 to<strong> w modelu serwis do serwisu<\/strong>, wystarczy, \u017ce zagwarantujemy dost\u0119p w dzier\u017cawie dostawcy. Sytuacja komplikuje si\u0119, kiedy chcemy aby aplikacja komunikowa\u0142a si\u0119 poprzez API w imieniu zalogowanego u\u017cytkownika.&nbsp;<\/p>\n\n\n\n<p>Dla rozwi\u0105zania multi-tenantowego musimy zagwarantowa\u0107, \u017ce API ma swojego reprezentanta u najemcy w postaci jednostki us\u0142ugi, co <strong>wymusza publiczn\u0105 dost\u0119pno\u015b\u0107 szablonu API<\/strong>. Wszystko za spraw\u0105 mechanizmu weryfikacji dost\u0119p\u00f3w, kt\u00f3ry tak naprawd\u0119 ma miejsce ramach tenanta, tj. dzier\u017cawcy u\u017cytkownika.&nbsp;Dlatego nale\u017cy dok\u0142adnie przemy\u015ble\u0107 model komunikacji mi\u0119dzy aplikacjami.&nbsp;<\/p>\n\n\n\n<p>Istotne jest, aby w zarejestrowanym obiekcie aplikacji API zdefiniowa\u0107 aplikacj\u0119 webow\u0105 jako jedn\u0105 ze zautoryzowanych \u2013 dzi\u0119ki temu klient b\u0119dzie m\u00f3g\u0142 zezwoli\u0107 na dost\u0119p do API, a tym samym jednostka us\u0142ugi zostanie zarejestrowana w jego dzier\u017cawie.&nbsp;<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" src=\"https:\/\/nearshore-it.eu\/wp-content\/uploads\/2024\/09\/blog_2023.05.31_graphic_5.png\" alt=\"azure active directory \" class=\"wp-image-8760\" title=\"\"><\/figure>\n<\/div>\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Zarz\u0105dzanie-to\u017csamo\u015bciami-\u2013-ograniczanie-dost\u0119pu-do-aplikacji-\">Zarz\u0105dzanie to\u017csamo\u015bciami \u2013 ograniczanie dost\u0119pu do aplikacji&nbsp;<\/h2>\n\n\n\n<p>Jak ju\u017c wspomnia\u0142em, w momencie pojawienia si\u0119 aplikacji biznesowej u danego dzier\u017cawcy ka\u017cdy u\u017cytkownik ma do niej dost\u0119p. Mo\u017cemy jednak to ograniczy\u0107.&nbsp;&nbsp;<\/p>\n\n\n\n<p>Je\u017celi chcemy, aby tylko okre\u015bleni u\u017cytkownicy czy te\u017c grupa u\u017cytkownik\u00f3w mia\u0142a dost\u0119p, musimy ustawi\u0107 nasz\u0105 jednostk\u0119 us\u0142ugi w taki spos\u00f3b, \u017ceby wymaga\u0142a przypisania.&nbsp;<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" src=\"https:\/\/nearshore-it.eu\/wp-content\/uploads\/2024\/09\/blog_2023.05.31_graphic_6.png\" alt=\"azure active directory \" class=\"wp-image-8761\" title=\"\"><\/figure>\n<\/div>\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Wtedy, aby u\u017cytkownik b\u0105d\u017a grupa mia\u0142a dost\u0119p, aplikacja musi widnie\u0107 w przypisanych do u\u017cytkownika lub grupy.&nbsp;<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" src=\"https:\/\/nearshore-it.eu\/wp-content\/uploads\/2024\/09\/blog_2023.05.31_graphic_7.png\" alt=\"azure active directory \" class=\"wp-image-8762\" title=\"\"><\/figure>\n<\/div>\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Innym sposobem na modyfikowanie dost\u0119p\u00f3w do aplikacji jest dost\u0119p warunkowy, kt\u00f3ry pozwala wymusza\u0107 pewne zachowania b\u0105d\u017a blokowa\u0107 dost\u0119p w zale\u017cno\u015bci od ustawionych scenariuszy. Opcja ta jest jednak dost\u0119pna w wersji Premium Azure Active Directory.&nbsp;Informacje o planach cenowych i dost\u0119pnych us\u0142ugach znajdziesz na stronie<a href=\"https:\/\/azure.microsoft.com\/pl-pl\/pricing\/details\/active-directory\/\" target=\"_blank\" rel=\"noreferrer noopener\"> Microsoft Azure.<\/a>&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Us\u0142uga-Azure-AD-od-Microsoft-\u2013-podsumowanie-\">Us\u0142uga Azure AD od Microsoft \u2013 podsumowanie&nbsp;<\/h2>\n\n\n\n<p>Aplikacja wielodost\u0119powa pozwala zredukowa\u0107 koszty poprzez wsp\u00f3\u0142dzielenie jednej instancji przez wielu klient\u00f3w. Zastosowanie Azure Active Directory do zarejestrowania takiego rozwi\u0105zania ogranicza dodatkowo koszty zwi\u0105zane z utrzymywaniem u\u017cytkownik\u00f3w, gdy\u017c niejako korzystamy z tych nale\u017c\u0105cych do najemcy. To od administratora dzier\u017cawcy, kt\u00f3ry chce mie\u0107 dost\u0119p, zale\u017cy, komu i w jakim zakresie chce go przydzieli\u0107.&nbsp;<\/p>\n\n\n\n<p>Niestety ograniczamy si\u0119 wtedy tylko do klient\u00f3w Microsoft, przez co mo\u017cemy by\u0107 mniej konkurencyjni. Je\u017celi chcieliby\u015bmy mie\u0107 rozwi\u0105zanie dost\u0119pne dla klient\u00f3w niezale\u017cnie od dostawcy po\u015bwiadcze\u0144 kt\u00f3rego u\u017cywaj\u0105, ciekaw\u0105 opcj\u0105 jest <strong>Azure Active Directory B2C z Single Sign-On<\/strong>.&nbsp;&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Budowanie systemu do zarz\u0105dzania po\u015bwiadczeniami od podstaw jest bardzo trudnym zadaniem i wymaga ogromnej wiedzy z zakresu bezpiecze\u0144stwa. Na szcz\u0119\u015bcie na rynku dost\u0119pne s\u0105 gotowe rozwi\u0105zania, takie jak np. Azure Active Directory (AAD).<\/p>\n","protected":false},"author":115,"featured_media":30994,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"iawp_total_views":28,"footnotes":""},"categories":[1,582],"tags":[576,566],"offering":[516],"class_list":["post-30971","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-artykuly","category-technologie","tag-cloud-engineering","tag-devops","offering-cloud-engineering"],"acf":[],"_links":{"self":[{"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/posts\/30971","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/users\/115"}],"replies":[{"embeddable":true,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/comments?post=30971"}],"version-history":[{"count":3,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/posts\/30971\/revisions"}],"predecessor-version":[{"id":33856,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/posts\/30971\/revisions\/33856"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/media\/30994"}],"wp:attachment":[{"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/media?parent=30971"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/categories?post=30971"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/tags?post=30971"},{"taxonomy":"offering","embeddable":true,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/offering?post=30971"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}