I STAR har vi en sikkerhedsmodel, STARs sikkerhedsmodel, som beskriver en sikkerhedsmodel for alle forretningsdomænerne. Sikkerhedsmodellen for jobannonceuniverset tager udgangspunkt i denne. For at kunne forstå følgende tanker om sikkerhedsmodellen forslåes det, at man kigger STARs sikkerhedsmodel igennem.
I forbindelse med de meget specifikke request headers, som skal angives ved servicekald for at overholde STARs sikkerhedsmodel, er der udviklet en guide (JobannonceService version 1 - Guide ) til vores aftagere, hvor der gives eksempel på udfyldelsen heraf for samtlige af vores aftagere.
Dokumentation af sikkerhedsmodel pba. IAM og JWT tokens:
Scopes
De forskellige endpoints i Jobannonceuniverset vil være lagt bag et AuthorizationScope. Det vil sige at før man overhovedet får lov til at kalde ind på nogle af vores endpoints, så skal det certifikat eller den identitet, man kalder ind med, være tildelt det specifikke scope, som endpointet kræver.
Hvis ikke certifikatet er blevet tildelt det scope, vil man blive mødt med en fejlbesked.
Man kan se listen over endpoints og de påkrævet scopes her:
Tildelingen af scopes til certifikater og identiteter, er noget der vil ske i IAM fremadrettet.
For nu sker det i AmpAdmin2.
Forretningsroller
Der bliver udstillet nogle forretningsroller, som sættes op i AmpAdmin2.
Den der er relevant, er den der hedder Jobannonce-Portal. Den bliver tildelt virksomheder, der agerer jobannonceportaler, som f.eks. http://Ofir.dk
Her har virksomheden et behov for at kunne læse, oprette og opdatere jobannoncer i Jobannonceuniverset på vegne af dets egne brugere.
Andre aftagere i Jobannonceuniverset vil ikke få tildelt nogle forretningsroller.
Klassificering
I Jobannonceuniverset klassificerer man kalderen, på baggrund af medsendte værdier fra kaldet, til at granulere, hvad kalderen har rettigheder til at læse, oprette eller redigere - se afsnittet: rettighedsstyring.
Forskellige brugere kan f.eks. have adgang til at oprette jobannoncer, hvor en almindelig virksomhed må ikke oprette jobannoncer på vegne af andre virksomheder, mens et jobcenter gerne må.
For et givent kald til vores services, kan vi hente organisationstypen, organisationskoden og den dertilhørende forretningsrolle ud fra SecurityContext
, som stammer fra Star.Foundation.Framework.Security
(se alle mapninger i /wiki/spaces/ISB/pages/4006872885):
Forretningsroller -
securityContext.Caller.Roles
Organisationstype
Portalbrugere -
securityContext.ImpersonatedAuthority.OrganisationType
Andre brugere -
securityContext.CallingAuthority.OrganisationType
Organisationskode
Portalbrugere -
securityContext.ImpersonatedAuthority.OrganisationCode
Andre brugere -
securityContext.CallingAuthority.OrganisationCode
På baggrund af disse tre værdier fra kaldet, vil kalderen blive klassificeret og på baggrund af klassificeringen, opnå visse rettigheder, der efterfølgende vil blive brugt til adgangstyring.
OrganisationsType | OrganisationCode | Forretningsrolle | Klassificering | |
---|---|---|---|---|
|
| ➡️ |
| |
|
| ➡️ |
| |
| 27 | ➡️ |
| |
| 34 | ➡️ |
| |
|
|
| ➡️ |
|
|
| ➡️ |
|
Request Headers Guide
For at foretage kald til vores service skal man udfylde request headers korrekt, hvilket er baseret på de rettigheder og roller, som man har fået tildelt i IAM. De skal følge følgende format:
ActiveOrganisation (x-activeOrganisation)
{ "OrganisationType": 0, "OrganisationCode":"string" }
RequestUserMetadata (x-requestUserMetadata)
{ "RequestUserStructure": { "UserFullName":"string", "RequestUserType": 0, "UserEmail": null, "UserIdentifier":"string" }, "RequestOrganisationStructure": { "OrganisationType": 0, "OrganisationCode":"string" }, "RegistrationDateTime":"2023-06-12T13:01:56.0362963+02:00" }
Nedenstående to tabeller giver et overblik over, hvordan de forskellige aftagere af Virksomhedsindsats skal udfylde disse request headers, for at få adgang til vores services (primært rettet mod kald til JobannonceService og dens dertilhørende jobannonce roller).
ActiveOrganisation (SecurityContext.ImpersonatedAuthority
)
KSS, Jobcenter | KSS, A-Kasse | Virksomhed | HR-system | Portal | |
---|---|---|---|---|---|
OrganisationType | 8 (Jobcenter) | 2 (AKasse)
| 24 (Virksomhed) | 24 (Virksomhed) | 24 (Virksomhed) |
OrganisationCode | Jobcenterkode (fx. 10100) | A-kassekode (fx. 15) | CVR | CVR for systemets bruger | CVR for portalens bruger |
RequestUserMetadata (SecurityContext.CallingAuthority
)
KSS, Jobcenter | KSS, A-Kasse | Virksomhed | HR-system | Portal | |
---|---|---|---|---|---|
RequestUserStructure.UserFullName | Sagsbehandlers navn | Sagsbehandlers navn | Virksomhedens kontaktpersons navn | Systemets kontaktpersons navn | Portalbrugerens navn |
RequestUserStructure.RequestUserType | 2 (Sagsbehandler) | 2 (Sagsbehandler) | 4 (Medarbejder) | 3 (System) | 4 (Medarbejder) |
RequestUserStructure.UserEmail | Sagsbehandlers email | Sagsbehandlers email | Virksomhedens kontaktpersons email | Systemets kontaktpersons email | Portalbrugerens email |
RequestUserStructure.UserIdentifier | Skal angives på denne form, hvor alle x skal erstattes af tal eller bogstaver: CVR:xxxxxxxx-UUID:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx CVR værdien skal være CVR angivet på certifikatet, UUID skal være certifikatets UUID. Hvis OCES2 certifikat er formen, hvor FID skal være certifikatets FID: CVR:xxxxxxxx-FID:xxxxxxxx | Skal angives på denne form, hvor alle x skal erstattes af tal eller bogstaver: CVR:xxxxxxxx-UUID:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx CVR værdien skal være CVR angivet på certifikatet, UUID skal være certifikatets UUID. Hvis OCES2 certifikat er formen, hvor FID skal være certifikatets FID: CVR:xxxxxxxx-FID:xxxxxxxx | Udfyld med selvvalgt identifier som I skal kunne identificere brugeren ud fra | Udfyld med selvvalgt identifier som I skal kunne identificere brugeren ud fra | Udfyld med selvvalgt identifier som I skal kunne identificere brugeren ud fra |
RequestOrganisationStructure.OrganisationType | Hvis,
| Hvis,
| 24 (Virksomhed) | 24 (Virksomhed) | 24 (Virksomhed) |
RequestOrganisationStructure.OrganisationCode | Hvis,
| Hvis,
| CVR | CVR for systemet | CVR for portalen |
Rettighedsstyring
Rettighederne til en jobannonce har nogle mere specifikke, nødvendige valideringer, som hverken kan dækkes af AllowAccess-attributen eller AuthorizeScope-attributten. Dette beskrives i dette afsnit.
Vigtigt: ‘Jobannonce opretter’ er en ekstra klassificering, som opretteren af jobannoncen får, når opretteren kalder ind.
Hvis du kalder ind som f.eks. et jobcenter og jobcenteret ER opretteren af jobannoncen, vil du blive klassificeret som “Jobannonce opretter”.
Hvis du kalder ind som f.eks. et jobcenter og jobcenteret IKKE er opretteren af jobannoncen, vil du blive klassificeret som “Jobcenter”.
Læserettigheder
Baseret på den tildelte klassificering, får man følgende læserettigheder:
Jobannonce opretter | JGM | A-kasse | Jobcenter | WIDK | Portal | Virksomhed | |
Hent jobannonce [udgivet] URL: /v2/Jobannonce/{id} | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
Hent jobannonce [ikke udgivet] URL: /v2/Jobannonce/{id} | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
Hent jobannonce historik URL: /v2/Jobannonce/{id}/historik | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
Jobannonce logo [udgivet] URL: /v2/Jobannonce/{id}/logo | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
Jobannonce logo [ikke udgivet] URL: /v2/Jobannonce/{id}/logo | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
Jobannoncevisninger URL: /v2/Jobannonce/visninger | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
Søg på jobannoncer URL: /v2/Jobannonce/soeg | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
Forhåndvisning af jobannonce URL: /v2/Jobannonce/billet/{billetId} | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
Skriverettigheder
Baseret på den tildelte klassificering, får man følgende skriverettigheder:
Jobannonce opretter | JGM | A-kasse | Jobcenter | WIDK | Portal | Virksomhed | |
---|---|---|---|---|---|---|---|
Opret jobannonce URL: /v2/Jobannonce | - | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
Opret jobannonce på vegne af andre URL: /v2/Jobannonce | - | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ |
Luk jobannonce URL: /v2/Jobannonce/{id}/luk | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
Slet jobannonce URL: /v2/Jobannonce/{id} | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
Opdater jobannonce URL: /v2/Jobannonce/{id} | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
Opret billet til jobannonce URL: /v2/Jobannonce/billet | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
Inkrementer visninger på jobannonce URL: /v2/Jobannonce/{id}/inkrementer-visninger | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
Supplerende materialer
Herunder findes supplerende materialer, som kan bruges til især at forstå sammenhængen mellem SecurityContext og sikkerhedsmodellen i STAR, som i høj grad afhænger af request headers.
Request headers og SecurityContext
Med udgangspunkt i STARs sikkerhedsmodel (STARs sikkerhedsmodel ), som benyttes af alle nuværende forretningsområder, har vi lavet følgende opklarende mapping mellem de parametre, som skal gives med i et request (se eksempel fra StarDebugger i udklip herover), og de parametre, som vi arbejder med i koden gennem SecurityContext objektet.
SecurityContext | D&S koncepter (brugt i Star.Debugger) |
---|---|
Caller | RequestStructure |
Caller.CallerType | RequestUserMetadata.RequestStructure.RequestUserType (https://starwiki.atlassian.net/wiki/spaces/FYS/pages/48890127/RequestUserTypeIdentifier)) |
Caller.Email | RequestUserMetadata.RequestStructure.Email |
Caller.FullName | RequestUserMetadata.RequestStructure.UserFullName |
Caller.Identifier | RequestUserMetadata.RequestStructure.UserIdentifier |
Caller.Roles | Roles (specific to ActiveOrganisation.OrganisationType) |
CallingAuthority | RequestOrganisationStructure |
CallingAuthority.OrganisationCode | RequestUserMetadata.RequestOrganisationStructure.OrganisationCode |
CallingAuthority.OrganisationType | RequestUserMetadata.RequestOrganisationStructure.OrganisationType |
CorrelationId | CorrelationId |
ImpersonatedAuthority | ActiveOrganisation |
ImpersonatedAuthority.OrganisationCode | ActiveOrganisation.OrganisationCode |
ImpersonatedAuthority.OrganisationType | ActiveOrganisation.OrganisationType |
SecurityContext eksempler
Herunder følger en række eksempler på hvordan securityContext objektet ville se ud for de givne aftagere af vores service. Dette sker ved samme mapning som herover til elementerne i selve requestet. En mere udtømmende liste af eksempler kan findes i STARs sikkerhedsmodel (STARs sikkerhedsmodel)
Eksempel 1: En virksomhed kalder JobannonceService gennem JobAg
https://starwiki.atlassian.net/wiki/spaces/FYS/pages/13926415/STARs+sikkerhedsmodel#Jobnet-for-arbejdsgivere
Caller | RequestStructure | Værdi |
Caller.CallerType | RequestUserMetadata.RequestStructure.RequestUserType (https://starwiki.atlassian.net/wiki/spaces/FYS/pages/48890127/RequestUserTypeIdentifier)) | Virksomhedsmedarbejder (4) |
Caller.Identifier | RequestUserMetadata.RequestStructure.UserIdentifier | Certifikat RID |
ImpersonatedAuthority | ActiveOrganisation | |
ImpersonatedAuthority.OrganisationCode | ActiveOrganisation.OrganisationCode | JobAg (10) |
ImpersonatedAuthority.OrganisationType | ActiveOrganisation.OrganisationType | Star (5) |
CallingAuthority | RequestOrganisationStructure | |
CallingAuthority.OrganisationCode | RequestUserMetadata.RequestOrganisationStructure.OrganisationCode | CVR-nummer |
CallingAuthority.OrganisationType | RequestUserMetadata.RequestOrganisationStructure.OrganisationType | Virksomhed (24) |
Eksempel 2: En virksomhed kalder JobannceService
Caller | RequestStructure | Værdi |
Caller.CallerType | RequestUserMetadata.RequestStructure.RequestUserType (https://starwiki.atlassian.net/wiki/spaces/FYS/pages/48890127/RequestUserTypeIdentifier)) | Virksomhedsmedarbejder (4) |
Caller.Identifier | RequestUserMetadata.RequestStructure.UserIdentifier | Certifikat RID |
ImpersonatedAuthority | ActiveOrganisation | |
ImpersonatedAuthority.OrganisationCode | ActiveOrganisation.OrganisationCode | CVR-nummer |
ImpersonatedAuthority.OrganisationType | ActiveOrganisation.OrganisationType | Virksomhed (24) |
CallingAuthority | RequestOrganisationStructure | |
CallingAuthority.OrganisationCode | RequestUserMetadata.RequestOrganisationStructure.OrganisationCode | CVR-nummer |
CallingAuthority.OrganisationType | RequestUserMetadata.RequestOrganisationStructure.OrganisationType | Virksomhed (24) |
Eksempel 3: En virksomhed kalder JobannonceService som en portalløsning
ImpersonatedAuthority | ActiveOrganisation | |
ImpersonatedAuthority.OrganisationCode | ActiveOrganisation.OrganisationCode | Brugerens CVR-nummer |
ImpersonatedAuthority.OrganisationType | ActiveOrganisation.OrganisationType | Virksomhed (24) |
CallingAuthority | RequestOrganisationStructure | |
CallingAuthority.OrganisationCode | RequestUserMetadata.RequestOrganisationStructure.OrganisationCode | Systemets CVR-nummer |
CallingAuthority.OrganisationType | RequestUserMetadata.RequestOrganisationStructure.OrganisationType | Virksomhed (24) |
Eksempel 4: En STAR supporter kalder JobannonceService gennem JobAg
https://starwiki.atlassian.net/wiki/spaces/FYS/pages/13926415/STARs+sikkerhedsmodel#Jobnet-for-arbejdsgivere
Caller | RequestStructure | Værdi |
Caller.CallerType | RequestUserMetadata.RequestStructure.RequestUserType (https://starwiki.atlassian.net/wiki/spaces/FYS/pages/48890127/RequestUserTypeIdentifier)) | 2 |
Caller.Identifier | RequestUserMetadata.RequestStructure.UserIdentifier | Certifikat RID |
ImpersonatedAuthority | ActiveOrganisation | |
ImpersonatedAuthority.OrganisationCode | ActiveOrganisation.OrganisationCode | JobAg (10) |
ImpersonatedAuthority.OrganisationType | ActiveOrganisation.OrganisationType | Star (5) |
CallingAuthority | RequestOrganisationStructure | |
CallingAuthority.OrganisationCode | RequestUserMetadata.RequestOrganisationStructure.OrganisationCode | JobAg (10) |
CallingAuthority.OrganisationType | RequestUserMetadata.RequestOrganisationStructure.OrganisationType | Star (5) |
Eksempel 5: En A-Kasse kalder JobannonceService
ImpersonatedAuthority | ActiveOrganisation | Værdi |
ImpersonatedAuthority.OrganisationCode | ActiveOrganisation.OrganisationCode | A-Kasse (2) |
ImpersonatedAuthority.OrganisationType | ActiveOrganisation.OrganisationType | Specifik a-kasse kode (fx. ASE - 94) |
CallingAuthority | RequestOrganisationStructure | |
CallingAuthority.OrganisationCode | RequestUserMetadata.RequestOrganisationStructure.OrganisationCode | A-Kasse (2) |
CallingAuthority.OrganisationType | RequestUserMetadata.RequestOrganisationStructure.OrganisationType | Specifik a-kasse kode (fx. ASE - 94) |
Eksempel 6: Et jobcenter kalder JobannonceService gennem et KSS-system
ImpersonatedAuthority | ActiveOrganisation | Værdi |
ImpersonatedAuthority.OrganisationCode | ActiveOrganisation.OrganisationCode | Jobcenter (8) |
ImpersonatedAuthority.OrganisationType | ActiveOrganisation.OrganisationType | Specifik jobcenter kode (fx. København - 10100) |
CallingAuthority | RequestOrganisationStructure | |
CallingAuthority.OrganisationCode | RequestUserMetadata.RequestOrganisationStructure.OrganisationCode | Jobcenter (8) |
CallingAuthority.OrganisationType | RequestUserMetadata.RequestOrganisationStructure.OrganisationType | Specifik jobcenter kode (fx. København - 10100) |
Eksempel 7: En kommune kalder JobannonceService gennem et KSS-system
ImpersonatedAuthority | ActiveOrganisation | Værdi |
ImpersonatedAuthority.OrganisationCode | ActiveOrganisation.OrganisationCode | Kommune (7) |
ImpersonatedAuthority.OrganisationType | ActiveOrganisation.OrganisationType | Specifik kommune kode (fx. Haderslev - 510) |
CallingAuthority | RequestOrganisationStructure | |
CallingAuthority.OrganisationCode | RequestUserMetadata.RequestOrganisationStructure.OrganisationCode | Kommune (7) |
CallingAuthority.OrganisationType | RequestUserMetadata.RequestOrganisationStructure.OrganisationType | Specifik kommune kode (fx. Haderslev - 510) |