Ulike Oauth2 tokens brukt i det offentlige, både eOppslag og annen bruk
Edit me
Krav
Ressursserver skal kunne…
- identifisere virksomheter vha organsisasjonsnummer
- alltid identifisere den jurdiske konsumenten
- også om denne ikke opererer en egen oauth klient
- kunne utlede styrken på identi
Generelt
- eoppslag-toke må lett kunne leve i parallell med fremtige token som kommuniserer andre representasjonsforhold
- bør støtte både sentralisert og distribuert infrastruktur
- sentralisert: all logikk i en og samme autorisasjonsserver)
- desentralisert: klient, AS eller ressurs-server “sender token hit og dit” mellom flere AS og STSer, slutt-tokenet bør vere identisk
Mulige realiseringer
Det finst flere alternative “inspirasjonskilder” som vi kan skjele til
- propiertære JWTer
- token exchange
- nested JWTs
- Vectors of trust
- “krav til sikkerhetsbillett ved deling av helseopplysninger”
Oppsummert:
| Priorietær |
|---|
{
"consumer_orgno": 999888777
"supplier_orgno": 888111222
"delegation_source": "Altinn Autorisasjon"
}
eller tilogmed norsk?
{
"konsument": 999888777
"leverandør": 888111222
"delegeringskilde": "Altinn Autorisasjon"
}
|
| Token exchange |
|---|
{
"orgno": 999888777
"act": {
"orgno": 888111222
"iss": "Altinn Autorisasjon"
}
}
|
| Nested JWT |
|---|
{
"orgno": 999888777
"jwt": "ey......"
}
der indre JWT er signert av Altinn og har body
{
"orgno": 888111222
}
|
| Helsesektoren |
|---|
"helse://client/requester":
{
"resourceType": "HealthcareService ",
"identifier": {
"system": "urn:oid:2.16.578.1.12.4.1.2.102",
"value": "client_id"
},
"provideBy": {
"Organization": {
"identifier": {
"system": "urn:oid:2.16.578.1.12.4.1.2.101",
"value": "999888777"
}}},
"provideBy": {
"Organization": {
"identifier": {
"system": "urn:oid:2.16.578.1.12.4.1.2.101",
"value": "888111222"
}}},
"name": "HSØ responssenter"
}
|
token exhange:
- https://tools.ietf.org/html/draft-ietf-oauth-token-exchange-16
- i eoppslag: delegatio has occured -> bruke
act-claim (og ikkje ‘may_act’) - virkar fornuftig å bruke orgno både for konsuemnt og leverandør
nested jwt:
- del av basic JWT spec (https://tools.ietf.org/html/rfc7519)
- ser typisk slik ut:

- krav til samme metode for identifisering av konsument, medfører at indre JWT må vere representasjon av leverandøren
- denne kan / bør vere signert av delegeringskilde og ikkje AS
- som blir tungtvindt, sidan mest naturleg at delegeriskjelde vert
- denne kan / bør vere signert av delegeringskilde og ikkje AS
vectors of trust
- https://tools.ietf.org/html/rfc8485
- inspirert av NIST 800-63 kan det sjå ut som
- fokuserer på individet som blir autentisering, og returnerer ein
vot-claim som ein struktur som fortel både om identitetstfastsettelse, autentiseringstyrke, føderasjonssstyrke, tillitsrammeverk, etc. - ser ikkje ut til å ha noko om delegering ?
helse
- “tungt” format inspirert av FHIR-standarden.
- ser ikkje ut til å spesifisere org. på vegne av annan org. (ennå)
"helse://client/requester":
{
"resourceType": "HealthcareService ",
"identifier": {
"system": "urn:oid:2.16.578.1.12.4.1.2.102",
"value": "<RESH-id>"
},
"provideBy": {
"Organization": {
"identifier": {
"system": "urn:oid:2.16.578.1.12.4.1.2.101",
"value": "<orgnr>"
}}},
"name": "HSØ responssenter"
}
Claims felles for alle alternativ:
“iss”: “https://oidc…”
Pros/Cons
Vurderingskriteria ?
- produktstøtte
- grad av “proprietæritet”, prøve å bruke eksisterene claims til “noko som ligner”?
- utvidbar / gjenbrukbar
- kva gjer andre ?
| faktor | Priorietær | Token exchange | Nested JWT | Vectors of Trust | “helse” |
|---|---|---|---|---|---|
| spec-status | RFC | Snart RFC | RFC | RFC | |
| produktstøtte | Nei. Men relativt lett å håndtere custom claims i dei fleste bibl. | Begrenset ? | Veit ikkje | Veit ikkje | Ikkje enno |
| Implementasjonskonsekvens | Liten/neglisjerbar | Liten | Potensielt få produkt å velge i | ||
| utvidbar / gjenbrukbar | Nei. Men relativt lett å håndtere custom claims i dei fleste bibl. | Begrenser | |||
| proprietær-grad | Ja | Delvis | |||
| kva gjer andre |
Ulike tokens som må støttes
Det er viktig å standardisere innhold i ulike typer tokens slik at konsumenter/tilbydere ikke blir usikre i hvilke virksomhetsprosesser tokenet kan brukes.
Vi kjenner p.t. følgende ulike scenario:
- Vanlige innloggingstoken (id_token) over OpenID connect
- Ansattinnlogging: id_token som forteller hvor en person er ansatt
- Tilgangstoken (access_token) for innbyggerstyrt API-sikring (autentiseringsnær autorisasjon)
- Tilgangstoken for maskin-til-maskin API-sikring
- Ulike varianter av tilgangstoken der det har skjedd en delegering eller token-berikelse fra passende autorativ kilde.
Beskrivelse av viktige claims
Standardiserte claims:
| claim | spec’ | kommentar | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| scope | oauth2 | ressursen som vert beskytta | ||||||||
| sub | OIDC, JWT | OIDC: unik, tjenestespesifikk ikke-meningsbærende identifikator(strengt matematisk definert), JWT: The “sub” (subject) claim identifies the principal that is the subject of the JWT. | ||||||||
| aud | OIDC, JWT | audience. OIDC: klienten som har mottatt id_token. JWT:The “aud” (audience) claim identifies the recipients that the JWT is intended for. | ||||||||
| act | Token Exchange | The “act” (actor) claim provides a means within a JWT to express that delegation has occurred and identify the acting party to whom authority has been delegated. | ||||||||
| may_act | Token Exchange | The “may_act” claim makes a statement that one party is authorized to become the actor and act on behalf of another party. | client_orgno | 944117784 | 974761076 | 999888777 (Storbanken) | 777888999 (Lillebanken) | 936796702 | ||
| acr | OIDC | Sikkerhetsnivå (Auth. context class ref. ) | ||||||||
| amr | OIDC | Autentiseringsmetode | ||||||||
| client_id | Oauth2 | identifikator for klient, ikke nødvendigvis meningsbærende |
Proprietære “norske” claims:
| claim | spec’ | kommentar | status |
|---|---|---|---|
| pid | Kontaktregisteret | personidentifikator i folkeregisteret (burde heitt folkeregisteridentifikator) | i bruk i id-porten |
| orgno | Enhetsregisteret | Organisasjonsnummer | |
| client_orgno | (Norsk) organisasjonsnummer til klienten. | I bruk i ID-porten | |
| consumer_orgno | Organisasjonsnummer til konsument | foreslått | |
| supplier_orgno | Organisasjonsnummer til leverandør | foreslått | |
| type | (evt. typ) |
hvilket token (se 1-9 ovanfor) som er utstedt | foreslått |
| amr_org | autentiseringsmetode for virksomhet [QCERT for eSeal, virksomhetssertifikat, client_secret, private_key_jwt] | foreslått |
Access tokens bør følge strukturen uansett om dei er direkte utsted av Autorisasjonsserver, eller om dei er eit resultat av ein Token Exchange operasjon.
Kodeverk for claims
TBD
sikkerhetsnivå
Personinnlogging:
- Level3
- Level4
Virksomhet:
(må defineres)
- eIDAS elektronisk segl
- eIDAS avansert segl
- eIDAS kvalifisert segl
Referanser
- [krr] : https://begrep.difi.no/Felles/personidentifikator
- [JWT] : RFC 7519
- [OIDC] : OpenID Connect Core 1.0 incorporating errata set 1