Designdokument for Gjestetjenesten

Gjestetjenesten er en tjeneste for administasjon av personer ved UiO som trenger tilgang til IT-systemene, men som ikke kan registreres i det vanlige HR-systemet for ansatte, typisk fordi de ikke skal motta lønn.

<style type="text/css">/* :Author: David Goodger (goodger@python.org) :Id: $Id: html4css1.css 7056 2011-06-17 10:50:48Z milde $ :Copyright: This stylesheet has been placed in the public domain. Default cascading style sheet for the HTML output of Docutils. See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to customize this style sheet. */ /* used to remove borders from tables and images */ .borderless, table.borderless td, table.borderless th { border: 0 } table.borderless td, table.borderless th { /* Override padding for "table.docutils td" with "! important". The right padding separates the table cells. */ padding: 0 0.5em 0 0 ! important } .first { /* Override more specific margin styles with "! important". */ margin-top: 0 ! important } .last, .with-subtitle { margin-bottom: 0 ! important } .hidden { display: none } a.toc-backref { text-decoration: none ; color: black } blockquote.epigraph { margin: 2em 5em ; } dl.docutils dd { margin-bottom: 0.5em } object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] { overflow: hidden; } /* Uncomment (and remove this text!) to get bold-faced definition list terms dl.docutils dt { font-weight: bold } */ div.abstract { margin: 2em 5em } div.abstract p.topic-title { font-weight: bold ; text-align: center } div.admonition, div.attention, div.caution, div.danger, div.error, div.hint, div.important, div.note, div.tip, div.warning { margin: 2em ; border: medium outset ; padding: 1em } div.admonition p.admonition-title, div.hint p.admonition-title, div.important p.admonition-title, div.note p.admonition-title, div.tip p.admonition-title { font-weight: bold ; font-family: sans-serif } div.attention p.admonition-title, div.caution p.admonition-title, div.danger p.admonition-title, div.error p.admonition-title, div.warning p.admonition-title { color: red ; font-weight: bold ; font-family: sans-serif } /* Uncomment (and remove this text!) to get reduced vertical space in compound paragraphs. div.compound .compound-first, div.compound .compound-middle { margin-bottom: 0.5em } div.compound .compound-last, div.compound .compound-middle { margin-top: 0.5em } */ div.dedication { margin: 2em 5em ; text-align: center ; font-style: italic } div.dedication p.topic-title { font-weight: bold ; font-style: normal } div.figure { margin-left: 2em ; margin-right: 2em } div.footer, div.header { clear: both; font-size: smaller } div.line-block { display: block ; margin-top: 1em ; margin-bottom: 1em } div.line-block div.line-block { margin-top: 0 ; margin-bottom: 0 ; margin-left: 1.5em } div.sidebar { margin: 0 0 0.5em 1em ; border: medium outset ; padding: 1em ; background-color: #ffffee ; width: 40% ; float: right ; clear: right } div.sidebar p.rubric { font-family: sans-serif ; font-size: medium } div.system-messages { margin: 5em } div.system-messages h1 { color: red } div.system-message { border: medium outset ; padding: 1em } div.system-message p.system-message-title { color: red ; font-weight: bold } div.topic { margin: 2em } h1.section-subtitle, h2.section-subtitle, h3.section-subtitle, h4.section-subtitle, h5.section-subtitle, h6.section-subtitle { margin-top: 0.4em } h1.title { text-align: center } h2.subtitle { text-align: center } hr.docutils { width: 75% } img.align-left, .figure.align-left, object.align-left { clear: left ; float: left ; margin-right: 1em } img.align-right, .figure.align-right, object.align-right { clear: right ; float: right ; margin-left: 1em } img.align-center, .figure.align-center, object.align-center { display: block; margin-left: auto; margin-right: auto; } .align-left { text-align: left } .align-center { clear: both ; text-align: center } .align-right { text-align: right } /* reset inner alignment in figures */ div.align-right { text-align: inherit } /* div.align-center * { */ /* text-align: left } */ ol.simple, ul.simple { margin-bottom: 1em } ol.arabic { list-style: decimal } ol.loweralpha { list-style: lower-alpha } ol.upperalpha { list-style: upper-alpha } ol.lowerroman { list-style: lower-roman } ol.upperroman { list-style: upper-roman } p.attribution { text-align: right ; margin-left: 50% } p.caption { font-style: italic } p.credits { font-style: italic ; font-size: smaller } p.label { white-space: nowrap } p.rubric { font-weight: bold ; font-size: larger ; color: maroon ; text-align: center } p.sidebar-title { font-family: sans-serif ; font-weight: bold ; font-size: larger } p.sidebar-subtitle { font-family: sans-serif ; font-weight: bold } p.topic-title { font-weight: bold } pre.address { margin-bottom: 0 ; margin-top: 0 ; font: inherit } pre.literal-block, pre.doctest-block, pre.math { margin-left: 2em ; margin-right: 2em } span.classifier { font-family: sans-serif ; font-style: oblique } span.classifier-delimiter { font-family: sans-serif ; font-weight: bold } span.interpreted { font-family: sans-serif } span.option { white-space: nowrap } span.pre { white-space: pre } span.problematic { color: red } span.section-subtitle { /* font-size relative to parent (h1..h6 element) */ font-size: 80% } table.citation { border-left: solid 1px gray; margin-left: 1px } table.docinfo { margin: 2em 4em } table.docutils { margin-top: 0.5em ; margin-bottom: 0.5em } table.footnote { border-left: solid 1px black; margin-left: 1px } table.docutils td, table.docutils th, table.docinfo td, table.docinfo th { padding-left: 0.5em ; padding-right: 0.5em ; vertical-align: top } table.docutils th.field-name, table.docinfo th.docinfo-name { font-weight: bold ; text-align: left ; white-space: nowrap ; padding-left: 0 } h1 tt.docutils, h2 tt.docutils, h3 tt.docutils, h4 tt.docutils, h5 tt.docutils, h6 tt.docutils { font-size: 100% } ul.auto-toc { list-style-type: none } </style> <div class="document" id="mal-for-designdokumenter"> <div class="section" id="innledning"> <h2>1 Innledning</h2> <p>Gjesteregistreringsløsningen (GREG, Guest REGistation) tilbyr et grensesnitt der institusjoner kan legge inn data om personer som trenger gjestekontoer for å få tilgang til IT-tjenester. Tjenesten kan integrere med institusjonens IAM (Identity and access management) løsning for overføring av data til denne.</p> <p>Hver institusjon som ønsker å bruke GREG vil ha sin egen instans som bare inneholder data om brukere ved den institusjonen.</p> <p>Registrering av gjester er en HR-funksjon, så GREG blir en del av institusjonens HR-portefølje. SAPDFØ er per i dag ikke en HR-løsning, men et lønns- og personalsystem, og dekker ikke gjesteregistreringer på en optimal måte.</p> <h3>1.1 Brukerroller</h3> <p>Det er to brukerkategorier i tjenesten:</p> <ul> <li>Verter: Dette er brukere ved institusjonene som kan invitere gjestebrukere. Tidligere også kalt sponsor, men det er for tvetydig.</li> <li>Gjester: Dette er personer lagt inn av vertene og som ønsker tilgang til IT-systemene ved institusjonen. Generelt er alle som ikke er studenter eller ansatte kategorisert som gjester - for eksempel emeritus og gjesteforskere.</li> </ul> <h3>1.2 Kontakt</h3> <ul> <li>Systemeier: Per 2022 er ØVA systemeier, men det pågår en prosess for å overføre dette til USIT.</li> <li>Drift: <a href="https://www.usit.uio.no/om/organisasjon/bnt/usitint/" target="vrtx-preview-window">Seksjon for integrasjon og elektroniske identiteter (USITINT)</a></li> <li>Utvikling: <a href="https://www.usit.uio.no/om/organisasjon/bnt/usitint/" target="vrtx-preview-window">Seksjon for integrasjon og elektroniske identiteter (USITINT)</a></li> </ul> </div> <div class="section" id="redegjorelse"> <h2>2 Redegjørelse</h2> <p>Dagens løsning i DFØ-SAP for å registrere gjestebrukere dekker ikke behovene til UiO og UiB, og det ble avgjort å utvikle en alternativ løsning for å få et system mer i tråd med behovene på plass innen kort tid. Generelt er det to utfordringer:</p> <ol> <li>Alle gjester må registreres manuelt av sentrale saksbehandlere, så det er arbeidskrevende å bruke DFØ-SAP. Dette blir mer arbeidskrevende for spesielt større institusjoner.</li> <li>En person kan enten bare være ansatt, bilagslønnet eller gjest, fordi dette styres av medarbeidergruppen (MG) til personen. En person kan bare være i en MG omgangne. En person kan derfor ikke være gjest og samtidig ha utbetalinger. Dette skaper utfordringer for alle som har flere roller hos institusjonen, og skaper ekstraarbeid.</li> </ol> <p>En utfordring var tidsperspektivet: GREG har primært fokus på håndteringen av gjester og prosessen med å få registrert deres personopplysniger. Dette skopet ble satt på grunna av tidsbegrensningen ved overgang til DFØ-SAP for UiB og UiO. GREG har for eksempel ikke forvaltning av mer granulerte roller for gjester.</p> <h3>2.1 Designvalg</h3> <h4>2.1.1 Kjerne</h4> <p>Kjernen er utviklet med Django, et populært webrammeverk i Python som har mange tilleggsmoduler som gjør utviklingen enklere. USIT har kompetanse på Django, og det er allerede brukt i Kada og Mreg.</p> <h4>2.1.2 Selvbetjeningsløsning</h4> <p>Selvbetjeningsløsningen er skrevet i <a href="https://reactjs.org/">React</a>, et av de mest brukte javascriptrammeverkene. Dette var et naturlig valg da utviklerne allerede hadde erfaring med det fra andre tjenester, som eValg og passordtjenester.</p> </div> <div class="section" id="detaljebeskrivelse"> <h2>3 Detaljbeskrivelse</h2> <p>Systemet består av to deler, en kjerne og en selvbetjeningsløsning, og kommunikasjon mellom disse skjer gjennom et REST API kjernen gjør tilgjengelig. Ved å splitte funksjonaliteten på denne måten er teknologivalg gjort i selvbetjeningsløsningen, som er frontenden sluttbrukerne ser, uavhengig av kjernen. Så utviklerne kan på hver sine side, frontend og backend, velge teknologier de er komfortable med. Det gjør også at andre løsninger, som UH Sak, kan integrere mot kjernen uavhengig av GREG sitt grensesnitt.</p> <p><em>Gjester</em> administreres av <em>verter</em> ved de forskjellige organisasjonsenhetene. Vertene kan gis <em>hierarkisk tilgang</em> som innebærer at de kan administrere gjester ved enheter under sin enhet i organisasjonstreet. </p> <p>Gjester inviteres av verter per e-post, og autentiserer seg normalt med Feide/Id-porten, men kan også fylle inn passnummer/fødselsnummer manuelt som deretter må godkjennes av verten. Når gjestens identitet er verifisert publiserer tjenesten en melding som plukkes opp av IGA (Cerebrum og Rapid Identity), og det blir så opprettet en brukerkonto, og vanlig løp for ansatte følger (oppretting av passord i Passordtjenesten osv.).</p> <p>En gjest kan ha <em>roller</em> ved flere enheter. En rolle har en <em>type</em>, <em>start dato</em>, og <em>slutt dato</em>. Dette muliggjør finkornet tilgangsstyring i tjenester som bruker Gjestetjenesten som kilde (per nå Rapid Identity og Cerebrum).</p> </div> <div class="section" id="teknisk-formal"> <h3>3.1 Teknisk formål</h3> <p>Kjernen har som hovedoppgave å lagre data om gjestene, sende notifikasjoner om relevante endringer via en meldingskø og tilby et REST API for å lagre og hente ut data.</p> <p>Endringer som det publiseres meldinger for inkluderer opprettelse av nye gjester i kjernen, endring gjort på eksisterende gjester og sletting av gjester.</p> <p>IGA-systemet ved en institusjon kan lytte på meldingskøen kjernen publiserer til for å bli gjort oppmerksom på endringer for gjester. Informasjonen i meldingene kan brukes til å gjøre oppslag i API'et.</p> <p>Kjernen vil også periodisk slette persondata for gjester som ikke lenger er aktive.</p> <p>Adgangskontroll til API'et skjer gjennom Gravitee.</p> <p>Selvbetjeningsløsningen lar sponsorer opprette gjester og lar gjestene legge inn identitetsinformasjon. Det er selvtjeningsløsningen som har ansvaret for flyten gjennom registreringsforløpet, dvs. den sender for eksempel ut e-poster til gjestene om at de må legge inn informasjon og til sponsorene om at de må godkjenne gjester som har lagt inn informasjon.</p> <p>Selvbetjeningsløsningen bruker kjernen hovedsaklig for å lagre informasjon.</p> </div> <div class="section" id="hoynivadesign-overordnet-design"> <h3>3.2 Høynivådesign (Overordnet design)</h3> <figure class="image"><img alt="" src="/om/organisasjon/iti/int/faglig/designdokumenter/greg-filer/overview_components.png" loading="lazy"/></figure> </div> <div class="section" id="lavnivadesign-design-av-enkeltkomponenter"> <h3>3.3 Lavnivådesign (Design av enkeltkomponenter)</h3> <h4>3.3.1 Kjerne</h4> <p>For å tilby et REST API brukes "<a href="https://www.django-rest-framework.org/">Django REST framework</a>". <br/> En <a href="https://swagger.io/specification/">OpenAPI</a> spesifikasjon av API'et er tilgjengelig (generert ved hjelp av <a href="https://github.com/tfranzel/drf-spectacular">drf-spectacular</a>) </p> <p>Sending av meldinger til RabbitMQ skjer ved hjelp av <a href="https://git.app.uib.no/it-bott-integrasjoner/pika-context-manager">pika-context-manager</a> biblioteket.</p> <p>Tilgangskontroll til API'et skjer via Gravitee. Brukerne av API'et er selvbetjeningsløsningen og institusjonens IAM-system.</p> <p>En kø for fremtidige hendelser håndteres av <a href="https://github.com/Koed00/django-q">Django-q</a>. Dette sikrer at:</p> <ul> <li>det blir sendt meldinger på startdatoen til roller som starter i fremtiden.</li> <li>epost blir sendt i fremtiden dersom e-post serveren har nedetid når man skulle sendt e-post.</li> <li>import av enheter fra Orgreg skjer daglig</li> </ul> <h4>3.3.2 Selvbetjeningsløsning</h4> <p>Løsningen er skrevet i typescript og benytter api-et til kjernen for å hente informasjon som brukeren har tilgang til. <a href="https://mui.com/">MaterialUI</a> brukes for å få et helhetlig design, <a href="https://react.i18next.com/">React-i18next</a> for å tilby tjenesten på flere språk, samt andre småpakker for mindre formål.</p> <p>Avhengig av om man er gjest, vert, eller ingen av delene får man tre forskjellige sider etter innlogging. De som ikke har tilgang til noe, får en enkel tekst som informerer om dette. Gjester får se en oversikt over den informasjonen som er lagret om dem. Verter får tilgang til grensesnittet for å invitere nye gjester, samt muligheten til å legge til eller endre roller på eksisterende gjester.</p> </div> <div class="section" id="avhengigheter"> <h2>4 Avhengigheter</h2> </div> <div class="section" id="systemet-avhenger-av"> <h3>4.1 Systemet avhenger av</h3> <ul> <li>Harbor: Lagring av container images</li> <li>Openshift: Applikasjonsplattform for å kjøre containere</li> <li>Gravitee: Tilgang til API styres gjennom Gravitee</li> <li>RabbitMQ: Brukes for å sende meldinger til andre systemer</li> <li>Dataporten: Muliggjør innlogging med Feide/Id-porten</li> <li>OrgReg: Holder informasjon om vertenes organisasjonsenheter oppdatert</li> </ul> </div> <div class="section" id="andre-systemer-er-avhengige-av"> <h3>4.2 Andre systemer er avhengige av</h3> <ul> <li>IGA (Rapid Identity/Cerebrum): Dersom tjenesten er nede vil ikke data for gjester bli holdt oppdatert, og grunnlaget for IT-tilgang bli utdatert for gjestene.</li> <li>Lenel OnGuard: Uten tilgang til informasjon om gjester kan ikke gjestene få tilgang til UiOs bygningsmasse.</li> </ul> </div> <div class="section" id="relaterte-systemer-optional"> <h2>5 Relaterte systemer</h2> <ul> <li>Cerebrum: Brukeradministrasjonssystem ved UiO. Henter data fra GREG og oppretter brukerkontoer. Sender data tilbake til Greg om hvilke gjester som har fått brukerkontoer.</li> <li>Rapid Identity: Brukeradministrasjonssystem ved UiB. Opererer etter samme mønster som integrasjonen mellom Cerebrum og GREG.</li> </ul> </div> <div class="section" id="lenker-og-referanser"> <h2>6 Lenker og referanser</h2> <ul class="simple"> <li><a href="https://git.app.uib.no/it-bott-integrasjoner/greg">Programkoden</a> (UiBs gitlab)</li> <li><a href="https://gjest.uio.no">Nettsiden ved uio</a></li> <li><a href="https://gjest.uib.no/">Nettsiden ved uib</a></li> </ul> </div> </div> </div> </div> <span class="vrtx-tags"> <span class="title">Emneord:</span> <span class="vrtx-tags-links"> <a href="https://www.usit.uio.no/?vrtx=tags&tag=gjest">gjest</a><span class="tag-separator">,</span> <a href="https://www.usit.uio.no/?vrtx=tags&tag=gjester">gjester</a><span class="tag-separator">,</span> <a href="https://www.usit.uio.no/?vrtx=tags&tag=gjestetjenesten">gjestetjenesten</a><span class="tag-separator">,</span> <a href="https://www.usit.uio.no/?vrtx=tags&tag=greg">greg</a><span class="tag-separator">,</span> <a href="https://www.usit.uio.no/?vrtx=tags&tag=gjestereg">gjestereg</a> </span> </span> <div class="vrtx-date-info"> <span class="published-date-label">Publisert</span> <span class="published-date">31. jan. 2022 11:39 </span> <span class="separator-date"> - </span> <span class="last-modified-date">Sist endret</span> <span class="last-modified-date">13. jan. 2023 12:56</span> </div> <div class="vrtx-social-components"> <a class="vrtx-email-friend" title='Del på e-post' href="mailto:?subject=Designdokument%20for%20Gjestetjenesten&body=https%3A%2F%2Fwww.usit.uio.no%2Fom%2Forganisasjon%2Fiti%2Fint%2Ffaglig%2Fdesigndokumenter%2Fdesigndokument-greg.html"> Del på e-post</a> <div class="vrtx-share-at-component"> <ul> <li class="vrtx-share-at-Facebook"> <a href="https://www.facebook.com/sharer.php?u=https%3A%2F%2Fwww.usit.uio.no%2Fom%2Forganisasjon%2Fiti%2Fint%2Ffaglig%2Fdesigndokumenter%2Fdesigndokument-greg.html" target="_blank" class="facebook"> Del på Facebook</a> </li> <li class="vrtx-share-at-X"> <a href="https://x.com/intent/tweet?text=Designdokument+for+Gjestetjenesten&amp;url=https%3A%2F%2Fwww.usit.uio.no%2Fom%2Forganisasjon%2Fiti%2Fint%2Ffaglig%2Fdesigndokumenter%2Fdesigndokument-greg.html" target="_blank" class="x"> Del på X</a> </li> </ul> </div> </div> </div> </div> <!--stopindex--> </main> </div> <!-- Page footer start --> <footer id="footer-wrapper" class="grid-container faculty-institute-footer"> <div id="footers" class="row"> <div class="footer-content-wrapper"> <div class="footer-title"> <a href="https://www.usit.uio.no/">IT-avdelingen</a> </div> <div class="footer-content"> <div> <h2>Kontakt</h2> <p><a href="/om/kontaktinformasjon/">Kontakt oss</a><br> <a href="/om/finn-fram/">Finn frem</a></p> </div> <div> <h2>Om nettstedet</h2> <p><a href="https://www.uio.no/om/regelverk/personvern/personvernerklering-nett.html">Bruk av informasjonskapsler</a><br> <a href=" https://uustatus.no/nb/erklaringer/publisert/9336562c-fbb2-48db-b3f2-54df3b231a44">Tilgjengelighetserklæring</a></p> </div> </div> <div class="footer-meta-admin"> <h2 class="menu-label">Ansvarlig for denne siden</h2> <p> <a href="mailto:webredaksjon@usit.uio.no">Nettredaksjonen, IT-avdelingen</a> </p> <div class="vrtx-login-manage-component"> <a href="https://www.usit.uio.no/om/organisasjon/iti/int/faglig/designdokumenter/designdokument-greg.html?authTarget" class="vrtx-login-manage-link" rel="nofollow"> Logg inn </a> </div> </div> </div> </div> </footer> <nav class="grid-container grid-container-top" id="footer-wrapper-back-to-uio"> <div class="row"> <a class="back-to-uio-logo" href="https://www.uio.no/" title="Gå til uio.no"></a> </div> </nav> <script type="module" src='/vrtx/dist/resources/uio2/js/uio2.js'></script> </body> </html>