Konsulent i en Coronatid: En eksperts synspunkt

Om at implementere OAuth 2.0 og OpenID autentifikationsprotokoller, at starte et nyt projekt helt remote i en Coronatid og at udvikle på Microsoft-stacken i 2020

Interview med seniorudvikler Steffen Jørgensen på opgave hos Mølholm Forsikring

Mølholm Forsikring (en del af Gjensidige Forsikring) har bragt konsulent Steffen Jørgensen ombord, for at stå for integrationen af et nyt autentifikationssystem og for at opdatere de nuværende protokoller med OAuth 2.0 og OpenID Connect. Det er en vigtig opgave, og Mølholm stod og havde brug for en specialist med relevant praktisk erfaring, som kunne træde til og levere i et stramt program.

Autentifikationsprotokoller, flows, og om at finde vej i ny og gammel teknologi

Steffens job er at implementere OAuth 2.0 og OpenID Connect. Det er noget, han tidligere har gjort med stor succes med ”NemID” (eBoks). I rollen hos Mølholm er Steffen ansvarlig for at integrere mod en Single-Sign-On server (SSO), hvilket medfører, at brugere som logger på hos Gjensidige, helt automatisk også logger på hos Mølholm:

”Når du på logger på Gjensidige eller Mølholm, så er det via NemID i Danmark. Gjensidige har en SSO server, hvilket Mølholms webapplikation har behov for at integrere mod. SSO-serveren håndterer hele login-flowet for brugeren, så når brugeren er logget ind i Gjensidige, så er pågældende også logget på ved Mølholm. Denne integration med SSO-serveren anvender OAuth 2.0 og OpenID Connect-protokollen, der i dag er de facto standarden for login-processer.”

OpenID Connect (OIDC) er en godkendelsesprotokol, der er baseret på OAuth 2.0 specifikationsfamilien. JSON Web Tokens (JWTs) opnås gennem autentifikations-flows, som er i overensstemmelse med specifikationerne for OAuth 2.0. OAuth 2.0 er koncentreret omkring ressource-adgang og deling. JWTs indeholder såkaldte ’claims’, der kan bruges af applikationen (eller Relying Party) til at autorisere, hvad brugeren kan og ikke kan gøre, og giver grundlæggende oplysninger om brugeren eller anden relevant data til Relying Party.

Der er derfor mange forskellige godkendelsesflows, man skal overveje, og det er derfor vigtigt at vælge det rigtige, som passer til det bestemte scenarie:

”Der er et væld af forskellige typer af logins som denne protokol understøtter. Brugere kunne logge ind via browser i en regulær webapplikation. Det kunne også være via en Single-Page App (SPA) eller endda via en native app på deres telefon. Desuden så understøtter protokollen også autentifikation til server-til-server kald, hvor en server helt grundlæggende skal autentificere sig selv med anden server for at benytte et bestemt API. Alle disse forskellige typer af klientintegrationer har vidt forskellige udfordringer rent sikkerhedsmæssigt, og det er kritisk at vælge det korrekte login-flow, samt at implementere i den korrekte rækkefølge, for at gøre det så sikkert som overhovedet muligt. Alt i alt tilføjer det en del kompleksitet, og det kræver en god forståelse for de forskellige klient-scenarier for at kunne opsætte det korrekt.”

Mølholms udgangspunkt er en monolitstruktur, hvilket altid er en udfordring, når man kommer ombord som ekstern konsulent.

”Når du kommer om bord som freelancer og har til opgave at udvikle nye løsninger til den klassiske monolitstruktur, så kan det være en smule overvældende, da al logikken hører til i en og samme applikation. På den anden side, hvis det er microservice-arkitektur, så er det meget nemmere at få et overblik over, hvad hver service laver. I den indledende discovery-fase er det ekstremt vigtigt at være opmærksom på den specifikke teknologi, man arbejder med. Ofte vil det være nødvendigt at gå ned i materien, hvis frameworket ikke er den nyeste version. Derfor er det vigtigt, at man i projektets planlægningsfase tager hensyn til den specifikke version af frameworket, fordi der kan være begrænsninger på, hvad den pågældende version kan ift. den nyeste version af samme teknologi.”

Han fortsætter:

”Fx har jeg arbejdet en del med .NET Core, hvilket er nyere og derfor også har meget bedre support til OIDC sammenlignet med en ASP.NET MVC-applikation. Det er meget mere manuelt og tidskrævende at opsætte login-flows i sidstnævnte, da de komponenter man har i .NET Core, simpelthen ikke er tilgængelige der. Det gør det lidt mere vanskeligt, og da sikkerhed er vigtigt, opererer man i forvejen med en meget lille fejlmargen."

At starte en ny opgave under Coronakrisen

Den største udfordring for Steffen var ikke det tekniske aspekt. I stedet var det at starte et nyt projekt og i en ny organisation lige da coronavirusset lukkede ned for hele verdenen.

For high-end IT-konsulenter er det normalt at forvente en vis grad af remotearbejde. Det er en meget uafhængig rolle af natur, og med nutidens teknologi er det stort set ikke nødvendigt at arbejde fra kundens kontorer. Når IT-konsulenter bliver bragt ombord for at hjælpe med komplekse projekter, så starter det hele med at få et overblik over den pågældende virksomhed/organisation, og denne proces involverer en del face-to-face møder med de nødvendige stakeholders.

Men COVID-19 vendte det hele på hovedet. Udover den normale rutine som karakteriserer livet som selvstændig freelancekonsulent, og som bærer præg af højt pres, stramme deadlines, en stejl læringskurve, så var der lige pludselig en ny og hidtil uset faktor i form af en verdensomspændende virus, som krævede yderligere fleksibilitet og omstillingsparathed fra den eksterne konsulent:

”I løbet af dette projekt har jeg skulle navigere stakeholders i to fusionerede virksomheder, beliggende i to forskellige lande, og oveni har det hele foregået hundrede procent remote pga. corona-nedlukningen. Nedlukningen tilførte et ekstra lag af kompleksitet til det kommunikative aspekt. Og med det danske team placeret i Odense og hovedorganisationen Gjensidige i Norge, så gjorde coronavirusset bestemt jobbet en del mere udfordrende. I bund og grund kan man sige, at jeg har lært at skulle navigere i to forskellige kulturer på samme tid.”

Steffen startede opgaven lige da coronavirusset lukkede hele verdenen ned, hvilket tvang alle til at arbejde remote, hvis de da var blandt de priviligerede, som havde mulighed for dette. Og selvom eksterne konsulenter er vant til at arbejde selvstændigt og er mestre i at remotearbejde, så bør vigtigheden i at afholde fysiske møder, især i den afgørende startfase af et projekt ikke undervurderes, fortæller Steffen:

”Man kunne sige, at det har været lidt af en 'lone ranger' opgave. Det er første gang, at jeg udelukkende har arbejdet remote. Jeg har ikke noget problem med fjernarbejde-formatet, det er trods alt en del af jobbet, og så længe jeg har adgang til nødvendig dokumentation, så er jeg selvkørende og i stand til at levere. Alligevel, så har effekten af corona gjort mig mere opmærksom på, hvor meget jeg værdsætter det lejlighedsvise fysiske møde ansigt-til-ansigt. Det har gjort at jeg faktisk prioriterer altid at bruge webcam, da jeg mener, det er med til at gøre virtuelle møder mere ’normale’ og gør at kontakten og interaktionen med interessenter bliver mere naturlig og menneskelig.”

Ifølge Steffen, har Corona understreget betydningen af at afholde møder ansigt-til-ansigt, for at bygge tillid, da det øger moralen og hjælper i pressede situationer, når der skal leveres på deadlines:

”Som mennesker er vi dygtige til at afkode hinandens kropssprog: ’Forstod han det jeg lige sagde, er en joke passende her?”, osv. Processen med at skabe sociale relationer er en stor udfordring, når du arbejder eksternt. Men jeg mener, man bør gøre en indsats og det er værd at investere i. Det bør prioriteres, fordi vi er mennesker og ikke robotter. Regelmæssig menneskelig interaktion giver noget spillerum og bygger en slags kredit med andre mennesker, som omsættes til tillid, og det er utroligt nyttigt, når arbejdsintensiteten stiger og alle er under pres for at levere til tiden.”

At udvikle på Microsoft-stacken i 2020

I løbet af projektet har Steffen udnyttet sin ekspertviden indenfor Microsoft-stacken. Før sin freelancekarriere arbejdede han som backendudvikler hos 3 i næsten et årti. Han er en senior .NET-udvikler og dygtig backend-specialist med betydelig erfaring i kravspecifikationsprocessen:

”Jeg har altid arbejdet i backend og Microsoft dominerer på dette område. Og her har .NET i mange år været go-to platform for mange udviklere. Tilføjer man at Danmark er et ’Microsoft-land’ med en stor efterspørgsel efter udviklere med kompetencer indenfor Microsoft-stacken, så har man en masse af de faktorer, der tilsammen har formet min karrierevej.”

Microsoft kører med klatten i disse dage. De kommer løbende ud med nye softwareløsninger på flere fronter og har en meget populær cloud-løsning i Azure. Dette betyder også, at det er ret spændende at udvikle indenfor dette felt:

”Med risiko for at lyde som en Microsoft-fyr, så kan jeg godt lide, hvad de laver i disse dage og den overordnede tilgang de har, når det kommer til at udvikle nye løsninger. Man kan se at de prøver at tænke ud af boksen. De er på forkant med ny spændende teknologi og er oppe mod de andre store drenge, såsom Google, Amazon, Facebook, osv. Konkurrencen er hård, og selvfølgelig er der fejlskud undervejs, men det er kun godt i min bog. Det er nemlig et bevis på, at de er risikovillige og skubber til grænserne for hvad der er muligt, hvilket vil resultere i bedre løsninger på sigt.”

Microsoft har markant succes med .NET Core, den nye open-source, cross-platform og modulære implementering af .NET frameworket. Selvom .NET frameworket stadig er meget udbredt, viser en undersøgelse foretaget af StackOverflow for 2020, at .NET Core er det ”mest elskede” non-web framework blandt udviklere efterfulgt af Torch/PyTorch og Flutter:

”.NET Core er fantastisk. Jeg elsker at de er gået den vej med .NET Core (open-source og cross-platform). Samtidig er den kadence de har med opdateringer og nye versioner også fremragende. Microsoft gør det godt med at tilpasse deres tech-stack efter det skift, vi ser over mod microservices-arkitekturen. Og da .NET Core er platform-agnostisk, er det også et perfekt fit ift. at bruge det i Continuous Delivery ved hjælp af containere. Målet er, at man kan putte programmet i en container, uploade det til cloud’en eller et andet sted, uden at tænke på om serveren kører Windows eller Linux. Det er helt uden betydning, da det ikke er bundet til nogen af dem.”

”Og når det kommer til ydeevne, så er .NET Core overlegen ift. det gamle .NET framework. Det er i perfekt overensstemmelse med nutidens krav til moderne arkitekturer. Microservices, hvis det er det man skal bygge, skal være skalerbare og yderst effektive til at løse den opgave, de er beregnet til at skulle løse. Dette løser de flaskehalsproblemer, som den klassiske monolitarkitektur ofte lider under.”

Microsofts fremtidige udfordrer til almægtige JavaScript

Et andet populært emne indenfor Microsoft-universet, som Steffen er meget begejstret for, er Blazor. Blazor er et nyt cross-platform web UI-framework, der skal tage kampen op mod JavaScript. Det er et gratis og open-source og giver udviklere mulighed for at lave webapps ved hjælp af C# og HTML:

”Blazor er Microsofts udfordrer til Angular, React og Vue. Det tager JavaScript fuldstændigt ud af ligningen, som indtil videre har været det de facto programmeringssprog, der blev brugt på browser- og klientniveau. Blazor giver mulighed for at udvikle frontend-logik med C#. Dette betyder, at du kan opbevare al din kode på et sprog, og få fordelene ved at bruge alle de normale udviklingsprocesser og værktøjer, dvs. TDD, og enhedstests.”

Blazor findes i to versioner: en til serversiden og en til klientsiden:

”I øjeblikket er der to versioner: Blazor på serversiden og WebAssembly Blazor (WASM) på klientsiden. Blazor på serversiden kører al kode på serveren og kommunikerer med browseren ved hjælp af SignalR. Dette fungerer rigtig godt. Det indlæses hurtigt og SignalR er en velafprøvet tilgang til browser-serverkommunikation. Men der er dog en hage, fordi det er SignalR kan der være problemer med skalerbarhed i denne model.

WebAssembly Blazor tager en helt anden vej. Her downloades alle de nødvendige .NET DLL’er til klienten og kører derefter direkte på klienten ved hjælp af WebAssembly (WASM). Dette er en massiv fordel, da applikationen stadig fungerer, hvis forbindelsen til serveren går tabt, bortset fra hvis data skal sendes og modtages selvfølgelig. Det giver endda mulighed for at applikationen kan være en progressiv webapp., hvor brugeren installerer applikationen på enheden som en native app.”

Men selvom der er fordele, har Microsoft stadig en forhindring de skal forbi, hvis Blazor skal hamle op med JavaS.cript:

”Den største ulempe er at downloaden kan være ret stor. Den første produktionsudgivelse af Blazor WASM (udgivet maj 2020) har en downloadstørrelse på knap 2 MB. Afhængig af din internetforbindelse kan dette udgøre et problem, på grund af den tid det tager applikationen af indlæse klienten fuldt. Dette kan være et problem for nogle brugere, selvom de fleste brugere i den vestlige verden har ret hurtige internetforbindelse til rådighed. Hvis Microsoft kan gøre downloaden af frameworket mindre og derved overvinde problemet med indlæsningshastighed, så har de meget vel en vinder på hånden i form af Blazor.”

”I det hele taget er det temmelig fedt at være udvikler på Microsoft-stacken i disse dage, og jeg er spændt på at se, hvor udviklingen af Blazor vil lande, og om det ender med at blive et hit og den nye go-to platform i dens niche.”

PDC_0352-web7-9

Konsulent

Steffen Jørgensen

Steffen Jørgensen er en Senior .NET-udvikler med mere end ti års erfaring i Microsoft-stacken. Hans største styrker ligger i backend og i kravspecifikationsprocessen med kunden. Han har stærk agil erfaring med fire års erfaring som Scrum Master ud over fire års implementering af agile processer som Team Lead.

BLOG

Insights and articles