SAP FSM Lifehack: Využití custom objektu ke správě credentials
FSM má spoustu skvělých funkcionalit, ale zároveň i pár painpointů, především v admin části, které zůstávají nepovšimnuty.
Proto je na každém konzultačním týmu, aby zapojil svou fantazii při jejich obcházení. Jednou z nich je i skladování a udržování technických ověřovacích dat, tzv. credentials. Pokud chce společnost naplno využít potenciál FSM, nevyhne se nastavování byznys pravidel, která jsou kostrou automatizace systému. Při jednodušších rozšířeních si implementační konzultant vystačí s akcemi typu Create/Update/Delete Object, Send Email, Push notifications a pod. Pokud už dochází ke složitějším požadavkům, když například. byznys pravidlo svým updatem objektu musí vyvolat další byznys pravidlo, je třeba updatovat více záznamů objektu, poslat data do jiného systému, konzultant musí sáhnout i po akcích typu Webhook a FSM Webhook. Podstatou této akce je převolání API, která už ale musí obsahovat určité bezpečnostní prvky. Smyslem tohoto blogu je právě inspirovat vás k jejich jednoduššímu manažování.
Jako příklad uvedu využití Client ID a Client Secret, které je třeba zadat do akce FSM Webhook. Vygenerování obou údajů je možné v admin části Clients (na úrovni Account). Systém vygeneruje oba údaje, přičemž již první zásadní nepříjemnost vzniká zde. Ke Client Id je možné se dostat i dodatečně, ale pokud si Client Secret neuložíte při jeho vygenerování, už se k němu nedostanete. O to nepříjemnější je, když na nastavení systému pracuje několik konzultantů, kteří tento údaj potřebují znát.
Dalším velkým minusem je, že když přenášíte vytvořené byznys pravidlo z developerského systému do testovacího, případně produkčního, je třeba Client Secret opětovně zadat do FSM Webhook akce. Praxe nás naučila, že mnoho manuálních kroků zvyšuje šanci na nevynucenou chybu, proto jsme si s kolegy vymysleli workaround.
Vytvoření custom objektu
Vytvořili jsme si nový custom object Credentials pro uchovávání přístupových dat s poli: Jméno, Popis, Uživatel, Heslo, Klíč.
Poznámka: Pole Klíč není pro potřeby Client ID a Client Secret potřeba. My toto pole používáme pro autorizační tokeny do externích systémů jako je ERP, Google Forms a pod.
Získané Client ID a Client Secret následně vytvoříme jako záznam nového objektu s unikátním názvem.
Takovýmto způsobem uložené credentials usnadňují adminům spolupráci a zároveň i řízení bezpečnosti, jelikož je možné pravidelně generovat nové ID+ Secret a jednoduše změnou záznamu tohoto objektu obnovit bezpečnost systému, aniž byste museli pracně hledat všechna byznys pravidla, která obsahují FSM Webhook a aktualizovat v nich natvrdo vloženo credentials.
Select údajů ve Variables byznys pravidla
Namísto toho, abychom vkládali do byznys pravidla natvrdo hodnotu obou údajů, ve Variables (Proměnné) si vytvoříme SELECT nad naším novým objektem. Je možné si vytvořit variable typu Value zvlášť pro Client ID a Client Secret, my jsme se však rozhodli jít formou 1 variable typu Array, protože využíváme byznys pravidla, kde dotahujeme až 4 různé záznamy objektu Credentials.
Vzor selectu pro Client ID a Client Secret:
SELECT a.udf.z_f_udo_credentials_user AS clientId, a.udf.z_f_udo_credentials_password AS clientSecret FROM UdoValue a WHERE a.udf.z_f_udo_credentials_name = ‚Client ID and Client Secret for API calls‘
V případě potřeby dotažení více záznamů credentials, použijeme JOIN na stejný objekt UdoValue, přičemž objekty budeme párovat podle stejného UdoValue.meta. Platí pravidlo, co záznam to nový JOIN:
SELECT a.udf.z_f_udo_credentials_user AS ClientID, a.udf.z_f_udo_credentials_password AS ClientSecret, b.udf.z_f_udo_credentials_key AS GoogleForms FROM UdoValue a JOIN UdoValue b ON a.meta = b.meta
WHERE a.udf.z_f_udo_credentials_name = ‚Client ID and Client Secret for API calls‘ AND b.udf.z_f_udo_credentials_name = ‚GOOGLE_FORMS‘
Přidání údajů do akce
Posledním krokem je vytvoření akce typu FSM Webhook, kde do polí Client ID a Client Secret dotáhneme hodnoty ze selectu. V našem případě jde o: ${creds[0].clientId} a ${creds[0].clientSecret}
Tip: Pole Client Secret neukazuje napsanou hodnotu, proto doporučuji napsat si daný vzorec pomimo a následně jej do daného pole jen nakopírovat.
Filip Žarnovický, CX Consultant