JobannonceService (version 2) sikkerhedsmodel
STAR har valgt en sikkerhedsmodel, https://starwiki.atlassian.net/wiki/spaces/FYS/pages/13926415, som som er fælles for alle forretningsdomænerne i STAR. Sikkerhedsmodellen for jobannonceuniverset tager udgangspunkt i denne IAM model. For få et bedre overblik over STARs valg af sikkerhedsmodel, kan man orientere sig i nedenstående.
I forbindelse med de meget specifikke request headers, som skal angives ved et servicekald for at overholde STARs sikkerhedsmodel, er der udviklet en guide (https://starwiki.atlassian.net/wiki/spaces/FYS/pages/4061790884 ) til STARs aftagere, hvor der er eksempel på udfyldelsen heraf for de forskellige typer af aftagere.
Dokumentation af sikkerhedsmodellen på baggrund af IAM og JWT tokens kan findes her:
https://starwiki.atlassian.net/wiki/spaces/SYS/pages/4126605930
https://starwiki.atlassian.net/wiki/spaces/SYS/pages/4228712538
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 STARs 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:
https://starwiki.atlassian.net/wiki/spaces/FYS/pages/4094492956
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, og den relevante 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 ikke må oprette jobannoncer på vegne af andre virksomheder, må et jobcenter gerne.
For et givent kald til STARs 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 https://starwiki.atlassian.net/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 STARs 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 STARs 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 | 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 | 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.
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 (https://starwiki.atlassian.net/wiki/spaces/FYS/pages/13926415 ), 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 STAR 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 STRAs 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 (https://starwiki.atlassian.net/wiki/spaces/FYS/pages/13926415)
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 | Værdi |
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) |