From 3671022d6dec99c2f6b8a071862167df806fb273 Mon Sep 17 00:00:00 2001 From: Thomas Johansen Date: Tue, 24 Sep 2024 10:12:02 +0200 Subject: [PATCH] Rename av bekreftelse-api deploy --- .github/workflows/bekreftelse-api.yaml | 2 +- apps/bekreftelse-api/README.md | 21 +++++++++- apps/bekreftelse-api/nais/nais-dev.yaml | 2 +- apps/bekreftelse-api/nais/nais-prod.yaml | 2 +- .../no/nav/paw/bekreftelse/api/Application.kt | 1 - .../api/context/ApplicationContext.kt | 11 +++-- .../api/routes/BekreftelseRoutes.kt | 40 ++++++++----------- .../api/services/AuthorizationService.kt | 3 ++ .../nav/paw/bekreftelse/api/utils/Logger.kt | 5 ++- .../resources/local/application_config.toml | 12 +++--- .../resources/nais/application_config.toml | 2 +- .../src/main/resources/openapi/api.yaml | 1 + .../bekreftelse/api/ApplicationTestContext.kt | 2 +- apps/kafka-key-generator/nais/nais-dev.yaml | 2 +- .../config/mock-oauth2-server/config.json | 29 +++++--------- 15 files changed, 72 insertions(+), 63 deletions(-) diff --git a/.github/workflows/bekreftelse-api.yaml b/.github/workflows/bekreftelse-api.yaml index 98bd73bd..d95260a9 100644 --- a/.github/workflows/bekreftelse-api.yaml +++ b/.github/workflows/bekreftelse-api.yaml @@ -18,7 +18,7 @@ on: env: MODULE: bekreftelse-api - IMAGE: europe-north1-docker.pkg.dev/${{ vars.NAIS_MANAGEMENT_PROJECT_ID }}/paw/paw-arbeidssoeker-bekreftelse-api + IMAGE: europe-north1-docker.pkg.dev/${{ vars.NAIS_MANAGEMENT_PROJECT_ID }}/paw/paw-arbeidssoekerregisteret-bekreftelse-api jobs: build: name: Build diff --git a/apps/bekreftelse-api/README.md b/apps/bekreftelse-api/README.md index 532e7eeb..edeb36a3 100644 --- a/apps/bekreftelse-api/README.md +++ b/apps/bekreftelse-api/README.md @@ -13,4 +13,23 @@ graph TD G[RapporteringTilgjengelig] -->|Legg til rapportering i liste| F H[RapporteringsMeldingMottatt]-->|slett rapportId fra liste|F I[PeriodeAvsluttet] --> |slett arbeidssøkerId|F -``` \ No newline at end of file +``` + +## Autentisering +Applikasjonen er beskyttet som en **OAuth2 Resource Server** vha **NAV Security Token Validator** fellesbibliotek. + +Andre applikasjoner som skal kalle APIet må benytte **OAuth2 Access Token** som **Bearer Token** i kall. + +### IDPorten +Ved innlogging av sluttbruker på **Min Side** benyttes **Access Token** fra **IdPorten**. + +**NAIS** tilbyr en **Login-Proxy** som benytter session cookie til å slå opp og legge ved Bearer Token i kallet +mot APIet. + +NAIS-dokumentasjon: +* [Login-Proxy](https://doc.nais.io/auth/explanations/#login-proxy) +* [IdPorten Auth How-To](https://doc.nais.io/auth/idporten/how-to/login/) +* [IdPorten Auth Reference](https://doc.nais.io/auth/idporten/reference/) + +### Entra ID (Azure AD) +### TokenX diff --git a/apps/bekreftelse-api/nais/nais-dev.yaml b/apps/bekreftelse-api/nais/nais-dev.yaml index 512e8f1c..afa174ee 100644 --- a/apps/bekreftelse-api/nais/nais-dev.yaml +++ b/apps/bekreftelse-api/nais/nais-dev.yaml @@ -1,7 +1,7 @@ apiVersion: nais.io/v1alpha1 kind: Application metadata: - name: paw-arbeidssoeker-bekreftelse-api + name: paw-arbeidssoekerregisteret-bekreftelse-api namespace: paw labels: team: paw diff --git a/apps/bekreftelse-api/nais/nais-prod.yaml b/apps/bekreftelse-api/nais/nais-prod.yaml index 8f70c3b8..d572b296 100644 --- a/apps/bekreftelse-api/nais/nais-prod.yaml +++ b/apps/bekreftelse-api/nais/nais-prod.yaml @@ -1,7 +1,7 @@ apiVersion: nais.io/v1alpha1 kind: Application metadata: - name: paw-arbeidssoeker-bekreftelse-api + name: paw-arbeidssoekerregisteret-bekreftelse-api namespace: paw labels: team: paw diff --git a/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/Application.kt b/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/Application.kt index 352ce212..832ac331 100644 --- a/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/Application.kt +++ b/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/Application.kt @@ -62,4 +62,3 @@ fun Application.module(applicationConfig: ApplicationConfig) { bekreftelseRoutes(applicationContext) } } - diff --git a/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/context/ApplicationContext.kt b/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/context/ApplicationContext.kt index 2262e066..b86663da 100644 --- a/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/context/ApplicationContext.kt +++ b/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/context/ApplicationContext.kt @@ -54,16 +54,19 @@ data class ApplicationContext( val poaoTilgangClient = PoaoTilgangCachedClient( PoaoTilgangHttpClient( - applicationConfig.poaoClientConfig.url, + baseUrl = applicationConfig.poaoClientConfig.url, { azureM2MTokenClient.createMachineToMachineToken(applicationConfig.poaoClientConfig.scope) } ) ) - val authorizationService = AuthorizationService(kafkaKeysClient, poaoTilgangClient) + val authorizationService = AuthorizationService(applicationConfig, kafkaKeysClient, poaoTilgangClient) val bekreftelseTopology = buildBekreftelseTopology(applicationConfig, prometheusMeterRegistry) - val bekreftelseKafkaStreams = - buildKafkaStreams(applicationConfig, healthIndicatorRepository, bekreftelseTopology) + val bekreftelseKafkaStreams = buildKafkaStreams( + applicationConfig, + healthIndicatorRepository, + bekreftelseTopology + ) val bekreftelseKafkaProducer = BekreftelseKafkaProducer(applicationConfig) diff --git a/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/routes/BekreftelseRoutes.kt b/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/routes/BekreftelseRoutes.kt index eb3c50c9..bdba90bf 100644 --- a/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/routes/BekreftelseRoutes.kt +++ b/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/routes/BekreftelseRoutes.kt @@ -22,35 +22,30 @@ fun Route.bekreftelseRoutes(applicationContext: ApplicationContext) { authenticate("idporten", "tokenx", "azure") { get("/tilgjengelige-bekreftelser") { with(authorize(null, authorizationService, TilgangType.LESE)) { - val tilgjengeligeBekreftelser = bekreftelseService - .finnTilgjengeligBekreftelser( - sluttbruker, - innloggetBruker, - TilgjengeligeBekreftelserRequest(sluttbruker.identitetsnummer), - useMockData - ) - - call.respond(HttpStatusCode.OK, tilgjengeligeBekreftelser) + val response = bekreftelseService.finnTilgjengeligBekreftelser( + sluttbruker, + innloggetBruker, + TilgjengeligeBekreftelserRequest(sluttbruker.identitetsnummer), + useMockData + ) - // TODO Exception handling + call.respond(HttpStatusCode.OK, response) } } + post("/tilgjengelige-bekreftelser") { request -> with(authorize(request.identitetsnummer, authorizationService, TilgangType.LESE)) { - val tilgjengeligeBekreftelser = bekreftelseService - .finnTilgjengeligBekreftelser( - sluttbruker, - innloggetBruker, - request, - useMockData - ) - - call.respond(HttpStatusCode.OK, tilgjengeligeBekreftelser) + val response = bekreftelseService.finnTilgjengeligBekreftelser( + sluttbruker, + innloggetBruker, + request, + useMockData + ) - // TODO Exception handling + call.respond(HttpStatusCode.OK, response) } - } + post("/bekreftelse") { request -> with(authorize(request.identitetsnummer, authorizationService, TilgangType.SKRIVE)) { bekreftelseService.mottaBekreftelse( @@ -61,11 +56,8 @@ fun Route.bekreftelseRoutes(applicationContext: ApplicationContext) { ) call.respond(HttpStatusCode.OK) - - // TODO Exception handling } } } } } - diff --git a/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/services/AuthorizationService.kt b/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/services/AuthorizationService.kt index 0657180a..94380995 100644 --- a/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/services/AuthorizationService.kt +++ b/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/services/AuthorizationService.kt @@ -5,6 +5,7 @@ import no.nav.paw.bekreftelse.api.authz.Azure import no.nav.paw.bekreftelse.api.authz.NavIdent import no.nav.paw.bekreftelse.api.authz.OID import no.nav.paw.bekreftelse.api.authz.PID +import no.nav.paw.bekreftelse.api.config.ApplicationConfig import no.nav.paw.bekreftelse.api.exception.BrukerHarIkkeTilgangException import no.nav.paw.bekreftelse.api.model.BrukerType import no.nav.paw.bekreftelse.api.model.InnloggetBruker @@ -20,6 +21,7 @@ import org.slf4j.Logger import org.slf4j.LoggerFactory class AuthorizationService( + private val applicationConfig: ApplicationConfig, private val kafkaKeysClient: KafkaKeysClient, private val poaoTilgangClient: PoaoTilgangClient ) { @@ -99,6 +101,7 @@ class AuthorizationService( } else { logger.debug("NAV-ansatt har benyttet {}-tilgang til informasjon om bruker", tilgangType) auditLogger.audit( + applicationConfig.runtimeEnvironment, sluttbruker.identitetsnummer, navAnsatt, tilgangType, diff --git a/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/utils/Logger.kt b/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/utils/Logger.kt index e95a0f95..4dab166f 100644 --- a/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/utils/Logger.kt +++ b/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/utils/Logger.kt @@ -4,6 +4,8 @@ import no.nav.common.audit_log.cef.CefMessage import no.nav.common.audit_log.cef.CefMessageEvent import no.nav.common.audit_log.cef.CefMessageSeverity import no.nav.paw.bekreftelse.api.model.NavAnsatt +import no.nav.paw.config.env.RuntimeEnvironment +import no.nav.paw.config.env.appNameOrDefaultForLocal import no.nav.poao_tilgang.client.TilgangType import org.slf4j.Logger import org.slf4j.LoggerFactory @@ -13,13 +15,14 @@ inline val T.logger: Logger get() = LoggerFactory.getLogger(T::class inline val auditLogger: Logger get() = LoggerFactory.getLogger("AuditLogger") fun Logger.audit( + runtimeEnvironment: RuntimeEnvironment, identitetsnummer: String, navAnsatt: NavAnsatt, tilgangType: TilgangType, melding: String, ) { val message = CefMessage.builder() - .applicationName("paw-arbeidssoeker-bekreftelse-api") // TODO: fra config + .applicationName(runtimeEnvironment.appNameOrDefaultForLocal()) .event(if (tilgangType == TilgangType.LESE) CefMessageEvent.ACCESS else CefMessageEvent.UPDATE) .name("Sporingslogg") .severity(CefMessageSeverity.INFO) diff --git a/apps/bekreftelse-api/src/main/resources/local/application_config.toml b/apps/bekreftelse-api/src/main/resources/local/application_config.toml index 206a51f2..a5bf3501 100644 --- a/apps/bekreftelse-api/src/main/resources/local/application_config.toml +++ b/apps/bekreftelse-api/src/main/resources/local/application_config.toml @@ -3,7 +3,7 @@ corsAllowOrigins = "localhost" [kafkaTopology] applicationIdSuffix = "v1" -producerId = "paw-arbeidssoeker-bekreftelse-api" +producerId = "paw-arbeidssoekerregisteret-bekreftelse-api" bekreftelseTopic = "paw.arbeidssoker-bekreftelse-v1" bekreftelseHendelsesloggTopic = "paw.arbeidssoker-bekreftelse-hendelseslogg-v1" internStateStoreName = "internStateStore" @@ -11,14 +11,14 @@ internStateStoreName = "internStateStore" [[authProviders]] name = "idporten" discoveryUrl = "http://localhost:8081/default/.well-known/openid-configuration" -clientId = "paw-arbeidssoeker-bekreftelse-api-idporten" +clientId = "paw-arbeidssoekerregisteret-bekreftelse-api-idporten" [authProviders.claims] map = ["acr=idporten-loa-high"] [[authProviders]] name = "tokenx" discoveryUrl = "http://localhost:8081/default/.well-known/openid-configuration" -clientId = "paw-arbeidssoeker-bekreftelse-api-tokenx" +clientId = "paw-arbeidssoekerregisteret-bekreftelse-api-tokenx" [authProviders.claims] map = ["acr=Level4", "acr=idporten-loa-high"] combineWithOr = true @@ -26,13 +26,13 @@ combineWithOr = true [[authProviders]] name = "azure" discoveryUrl = "http://localhost:8081/default/.well-known/openid-configuration" -clientId = "paw-arbeidssoeker-bekreftelse-api-azure" +clientId = "paw-arbeidssoekerregisteret-bekreftelse-api-azure" [authProviders.claims] map = ["NAVident"] [azureM2M] tokenEndpointUrl = "http://localhost:8081/default/token" -clientId = "paw-arbeidssoeker-bekreftelse-api" +clientId = "paw-arbeidssoekerregisteret-bekreftelse-api" [poaoClientConfig] url = "http://localhost:8090/poao-tilgang/" @@ -44,6 +44,6 @@ scope = "api://test.test.kafka-keys/.default" [kafkaClients] brokers = "localhost:9092" -applicationIdPrefix = "paw-arbeidssoeker-bekreftelse-api" +applicationIdPrefix = "paw-arbeidssoekerregisteret-bekreftelse-api" [kafkaClients.schemaRegistry] url = "http://localhost:8082" diff --git a/apps/bekreftelse-api/src/main/resources/nais/application_config.toml b/apps/bekreftelse-api/src/main/resources/nais/application_config.toml index 6b35bbb6..001bed16 100644 --- a/apps/bekreftelse-api/src/main/resources/nais/application_config.toml +++ b/apps/bekreftelse-api/src/main/resources/nais/application_config.toml @@ -3,7 +3,7 @@ corsAllowOrigins = "${CORS_ALLOW_ORIGINS}" [kafkaTopology] applicationIdSuffix = "${KAFKA_STREAMS_ID_SUFFIX}" -producerId = "paw-arbeidssoeker-bekreftelse-api" +producerId = "paw-arbeidssoekerregisteret-bekreftelse-api" bekreftelseTopic = "${KAFKA_PAW_ARBEIDSSOKER_BEKREFTELSE_TOPIC}" bekreftelseHendelsesloggTopic = "${KAFKA_PAW_ARBEIDSSOKER_BEKREFTELSE_HENDELSESLOGG_TOPIC}" internStateStoreName = "internStateStore" diff --git a/apps/bekreftelse-api/src/main/resources/openapi/api.yaml b/apps/bekreftelse-api/src/main/resources/openapi/api.yaml index 4ed83d96..ea28c933 100644 --- a/apps/bekreftelse-api/src/main/resources/openapi/api.yaml +++ b/apps/bekreftelse-api/src/main/resources/openapi/api.yaml @@ -216,6 +216,7 @@ components: - instance example: type: "about:blank" + code: "BRUKER_HAR_IKKE_TILGANG" title: "Forbidden" status: 403 detail: "Access denied" diff --git a/apps/bekreftelse-api/src/test/kotlin/no/nav/paw/bekreftelse/api/ApplicationTestContext.kt b/apps/bekreftelse-api/src/test/kotlin/no/nav/paw/bekreftelse/api/ApplicationTestContext.kt index 551dd568..7ceaeab7 100644 --- a/apps/bekreftelse-api/src/test/kotlin/no/nav/paw/bekreftelse/api/ApplicationTestContext.kt +++ b/apps/bekreftelse-api/src/test/kotlin/no/nav/paw/bekreftelse/api/ApplicationTestContext.kt @@ -52,7 +52,7 @@ class ApplicationTestContext { val poaoTilgangClientMock = mockk() val bekreftelseKafkaProducerMock = mockk() val bekreftelseHttpConsumerMock = mockk() - val authorizationService = AuthorizationService(kafkaKeysClientMock, poaoTilgangClientMock) + val authorizationService = AuthorizationService(applicationConfig, kafkaKeysClientMock, poaoTilgangClientMock) val bekreftelseServiceMock = mockk() val bekreftelseServiceReal = BekreftelseService( applicationConfig, diff --git a/apps/kafka-key-generator/nais/nais-dev.yaml b/apps/kafka-key-generator/nais/nais-dev.yaml index c3e93043..4b2fb8f0 100644 --- a/apps/kafka-key-generator/nais/nais-dev.yaml +++ b/apps/kafka-key-generator/nais/nais-dev.yaml @@ -52,4 +52,4 @@ spec: - application: paw-arbeidssoekerregisteret-utgang-pdl - application: paw-microfrontend-toggler - application: paw-arbeidssoekerregisteret-hendelselogg-backup - - application: paw-arbeidssoeker-bekreftelse-api + - application: paw-arbeidssoekerregisteret-bekreftelse-api diff --git a/docker/mocks/config/mock-oauth2-server/config.json b/docker/mocks/config/mock-oauth2-server/config.json index 1da426ae..5468ee11 100644 --- a/docker/mocks/config/mock-oauth2-server/config.json +++ b/docker/mocks/config/mock-oauth2-server/config.json @@ -8,22 +8,11 @@ "requestMappings": [ { "requestParam": "client_id", - "match": "paw-microfrontend-toggler", + "match": "paw-arbeidssoekerregisteret-bekreftelse-api-tokenx", "claims": { - "sub": "admin@paw-microfrontend-toggler", + "sub": "admin@paw-arbeidssoekerregisteret-bekreftelse-api", "aud": [ - "paw-microfrontend-toggler" - ], - "acr": "idporten-loa-high" - } - }, - { - "requestParam": "client_id", - "match": "paw-arbeidssoeker-bekreftelse-api-tokenx", - "claims": { - "sub": "admin@paw-arbeidssoeker-bekreftelse-api", - "aud": [ - "paw-arbeidssoeker-bekreftelse-api-tokenx" + "paw-arbeidssoekerregisteret-bekreftelse-api-tokenx" ], "pid": "17830348441", "acr": "idporten-loa-high" @@ -31,22 +20,22 @@ }, { "requestParam": "client_id", - "match": "paw-arbeidssoeker-bekreftelse-api-azure", + "match": "paw-arbeidssoekerregisteret-bekreftelse-api-azure", "claims": { - "sub": "admin@paw-arbeidssoeker-bekreftelse-api", + "sub": "admin@paw-arbeidssoekerregisteret-bekreftelse-api", "aud": [ - "paw-arbeidssoeker-bekreftelse-api-azure" + "paw-arbeidssoekerregisteret-bekreftelse-api-azure" ], "NAVident": "12345" } }, { "requestParam": "client_id", - "match": "paw-arbeidssoeker-bekreftelse-api-idporten", + "match": "paw-arbeidssoekerregisteret-bekreftelse-api-idporten", "claims": { - "sub": "admin@paw-arbeidssoeker-bekreftelse-api", + "sub": "admin@paw-arbeidssoekerregisteret-bekreftelse-api", "aud": [ - "paw-arbeidssoeker-bekreftelse-api-idporten" + "paw-arbeidssoekerregisteret-bekreftelse-api-idporten" ], "pid": "17830348441", "acr": "idporten-loa-high"