Oracle APEX – Let’s integrate with JIRA! Część 2

11 września 2019, Lech Cieślik

Jira jest oprogramowaniem firmy Atlassian służącym do zarządzania projektami. Użytkownik pracujący z dowolną aplikacją APEX często potrzebuje zgłosić błąd dotyczący działania aplikacji lub danych z którymi pracuje. Zamiast logować się do Jiry, szukać odpowiedniego projektu, korzystać z wizarda który umożliwi mu stworzenie nowego zgłoszenia (nazwy, typu, opisu, przypisania zgłoszenia itp), może w łatwy sposób wykorzystać do tego rozwiązanie zaimplementowane w Oracle APEX, które krok po kroku przedstawimy w serii artykułów Oracle APEX- Let’s integrate with Jira! W przedstawionych przykładach wykorzystamy bazę danych Oracle Database 12c Enterprise Edition oraz narzędzie Oracle SQL Developer Version 18.2.

Ten artykuł jest drugim z serii wpisów w którym opisujemy integrację aplikacji Oracle APEX z Jirą. W pierwszym artykule szczegółowo opisaliśmy standard autoryzacji jakim jest OAuth. Dodatkowo opowiedzieliśmy o „OAuth Dance”, przedstawiliśmy przykłady żądań pozwalających na uzyskanie odpowiedniego rodzaju tokenów oraz wspomnieliśmy o algorytmach szyfrowania wykorzystanych do podpisu odpowiedniego żądania. W tym artykule skupimy się dokładniej na implementacji samego podpisu oraz użyciu języka Java w Oracle.

Wykorzystanie Javy w Oracle

Jak wspomnieliśmy w artykule Oracle APEX – Let’s integrate with JIRA! Część 1. Jira narzuca nam implementację podpisu cyfrowego za pomocą algorytmu SHA1-RSA. Biblioteki PL/SQL nie wspierają jego implementacji dlatego musieliśmy znaleźć inne rozwiązanie. Z pomocą przyszły nam biblioteki Java których użyliśmy w kodzie PL/SQL. Dlatego zanim przejdziemy do implementacji podpisu cyfrowego z użyciem SHA1-RSA przedstawimy prosty przykład utworzenia własnej klasy Java w Oracle.

Baza danych Oracle wspiera Javę od wersji 8i a jej użycie okazuje się bardzo proste. Jednym ze sposobów utworzenia własnej klasy jest wykorzystanie instrukcji przedstawionej poniżej:

W ten sposób utworzyliśmy klasę Example, zawierająca metodę exampleMethod która przyjmuje i zwraca obiekt String. Wszystkie obiekty Javy można znaleźć w menu bocznym narzędzia Oracle SQL Developer w zakładce Java.

Następnie tworzymy funkcję PL/SQL która pozwoli na użycie wcześniej napisanej klasy:

Funkcję f_example możemy wykorzystać w dowolnym miejscu bloku PL/SQL:

SHA1-RSA w PL/SQL

Jeśli wiemy już jak proste jest wykorzystanie Javy w kodzie PL/SQL możemy przejść do trudniejszego zagadnienia jakim jest utworzenie podpisu cyfrowego z wykorzystaniem algorytmu SHA1-RSA. Więcej o samym podpisie cyfrowym i jego wykorzystaniu OAuth dance w integracji Oracle APEX z Jirą pisaliśmy w artykule Oracle APEX- Let’s integrate with JIRA ! Część 1.

Małe przypomnienie. OAuth jest standardem autoryzacji który pozwala udostępniać aplikacjom informacje przechowywane u innych dostawców za pomocą wymiany tokenów. Żądanie o token musi zostać podpisane kluczem prywatnym (znajdującym się po stronie naszej aplikacji), a następnie zweryfikowane za pomocą klucza publicznego (znajdującego się po stronie Jiry). I najważniejsze, podpis musi zostać zaimplementowany za pomocą algorytmu SHA1-RSA.

Klucze prywatny i publiczny można wygenerować na wiele sposób. Na potrzeby tego artykułu użyliśmy OpenSSL. Jest to otwarta implementacja protokołów SSL oraz różnych algorytmów kryptograficznych, dostępna dla systemów Linux jak i Microsoft Windows. Generowanie kluczy oraz konfiguracja Atlassian Jira zostały szczegółowo opisane na oficjalnej stronie Atlassian:  https://developer.atlassian.com/server/jira/platform/oauth/

Żeby użyć metody SHA1-RSA w PL/SQL utworzymy własną klasę „RSASignature” która skorzysta z gotowej biblioteki „java.security.*”. Klasa będzie zawierać metodę „sign(String, String)” przyjmującą parametr base string oraz klucz prywatny, a zwracać zaszyfrowaną sygnaturę która może zostać użyta w „OAuth Dance”.

Dodatkowo w klasie  „RSASignature” została zaimplementowana konwersja kluczy prywatnego i  publicznego z obiektów typu „String” do obiektów „PrivateKey” i „PublicKey” oraz weryfikacja poprawności sygnatury. Cały kod jest dostępny pod adresem: https://github.com/Pretius/java-rsa-signature

Mając przygotowany kod Java, utworzymy obiekt Java Source według opisanego wcześniej przykładu, a następnie zdefiniujemy sposób jego wywołania w bloku PL/SQL czyli funkcję „signRSA”:

Podsumowanie

W artykule opisaliśmy sposób użycia Javy w Oracle. Następnie przyjrzeliśmy się generowaniu kluczy i implementacji podpisu cyfrowego za pomocą SHA1-RSA. Utworzona sygnatura może być wykorzystana podczas procesu autentykacji, który został opisany w pierwszym artykule serii. Kolejny, ostatni wpis zostanie poświęcony wykorzystaniu Jira API do utworzenia własnego zgłoszenia w Jira.

Tagi: , , , , , ,

Zapraszamy do kontaktu!

Pretius jest firmą tworząca oprogramowanie wspierające biznes.
Tworzymy aplikacje webowe wykorzystując: Java, Oracle DB, Oracle Apex, AngularJS.
Skontaktuj się z nami, aby porozmawiać o tym jak możemy pomóc w realizacji Twojego projektu!