Complio-plugin til Umbraco

Dette projekt er udviklet som mit bachelorprojekt på webudvikleruddannelsen i samarbejde med Digital Partners, som primært udvikler websites og digitale løsninger i Umbraco for virksomheder. Digital Partners ønskede at få deres analyseplatform Complio integreret direkte i Umbracos backoffice som et naturligt plugin.

Complio er Digital Partners’ egen analyseplatform og fungerer som et alternativ til Google Analytics, med fokus på indsigt i brugeradfærd, kampagneperformance og datadrevet beslutningstagning.

Umbraco er et open source Content Management System (CMS), der anvendes til administration af indhold og digitale løsninger. Projektets formål var at undersøge, hvordan Complio kunne fungere som et tæt integreret plugin i Umbracos backoffice, der matcher både teknisk arkitektur og brugeroplevelse.

Løsningen er udviklet som et proof-of-concept med fokus på sikkerhed, skalerbarhed og tæt integration med Umbracos eksisterende arkitektur og konventioner.

Pluginet er opbygget som en Single Page Application (SPA) i Umbracos backoffice. Frontenden er implementeret med Lit, hvilket muliggør brug af letvægts web components og en modulær frontend-arkitektur. Dette sikrer høj performance og en brugeroplevelse, der følger Umbracos designprincipper.

Kommunikationen mellem frontend og backend sker via RESTful API-endpoints. Frontenden håndterer udelukkende præsentation og brugerinteraktion, mens al forretningslogik, validering og datakommunikation er placeret server-side for at sikre en robust og sikker løsning.

Backend-arkitekturen er baseret på MVC-principper, hvor API-controllers fungerer som indgangspunkter for requests, mens data og forretningslogik er samlet i et separat service- og model-lag. Controllers er bevidst holdt tynde, og funktionalitet som håndtering af site token og kommunikation med Complios API er samlet i dedikerede services, der registreres via Dependency Injection ved hjælp af Umbracos Composer-pattern. Site token konfigureres i Umbracos backoffice og er kun tilgængeligt for brugere med de nødvendige rettigheder.

Sikkerheden bygger på Umbracos eksisterende autentifikation og rollebaserede adgangskontrol. Pluginet har ingen egen login-mekanisme, og følsomme data behandles udelukkende server-side. Der er implementeret rate limiting og login-monitorering som middleware i Umbracos request-pipeline for at beskytte mod brute-force- og DoS-angreb.

Sitetoken og konfiguration i Umbraco backoffice

For at sikre en kontrolleret og sikker kommunikation mellem Umbraco-pluginet og Complios API anvender løsningen et site token. Site token fungerer som en identifikator, der knytter det enkelte website i Umbraco til den tilsvarende konfiguration og data i Complio.

Site token konfigureres direkte i Umbracos backoffice via en dedikeret ComplioSettings-node. Denne node er baseret på et specifikt Document Type, der udelukkende har til formål at indeholde konfigurationsdata for Complio-pluginet. I dette dokument findes et felt til indtastning af site token, som udfyldes af en administrator.

Adgangen til site token er begrænset ved hjælp af Umbracos rolle- og rettighedssystem. Kun brugere med de nødvendige rettigheder kan se og redigere feltet, mens øvrige brugere ikke har adgang. Denne begrænsning er yderligere forstærket ved brug af Document Property Values, hvor visning og redigering af feltet er deaktiveret for ikke-administrative brugergrupper. Herved forhindres utilsigtet eksponering af følsomme konfigurationsoplysninger.

Når site token er gemt i backoffice, hentes det udelukkende server-side via en dedikeret service og anvendes automatisk ved API-kald til Complio. Tokenet eksponeres ikke i frontend-koden og sendes ikke til klienten, hvilket reducerer risikoen for misbrug og manipulation. Denne adskillelse mellem konfiguration, frontend og backend understøtter både sikkerhed og vedligeholdelse.

Opsætningen af site token er dermed et centralt element i pluginets sikkerhedsarkitektur og indgår som et selvstændigt autorisationslag oven på Umbracos eksisterende autentifikation og adgangskontrol.