Skip to content

Commit

Permalink
Rename av bekreftelse-api deploy
Browse files Browse the repository at this point in the history
  • Loading branch information
naviktthomas committed Sep 24, 2024
1 parent f333c39 commit 3671022
Show file tree
Hide file tree
Showing 15 changed files with 72 additions and 63 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/bekreftelse-api.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
21 changes: 20 additions & 1 deletion apps/bekreftelse-api/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
```
```

## 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
2 changes: 1 addition & 1 deletion apps/bekreftelse-api/nais/nais-dev.yaml
Original file line number Diff line number Diff line change
@@ -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
Expand Down
2 changes: 1 addition & 1 deletion apps/bekreftelse-api/nais/nais-prod.yaml
Original file line number Diff line number Diff line change
@@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,4 +62,3 @@ fun Application.module(applicationConfig: ApplicationConfig) {
bekreftelseRoutes(applicationContext)
}
}

Original file line number Diff line number Diff line change
Expand Up @@ -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)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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<TilgjengeligeBekreftelserRequest>("/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<BekreftelseRequest>("/bekreftelse") { request ->
with(authorize(request.identitetsnummer, authorizationService, TilgangType.SKRIVE)) {
bekreftelseService.mottaBekreftelse(
Expand All @@ -61,11 +56,8 @@ fun Route.bekreftelseRoutes(applicationContext: ApplicationContext) {
)

call.respond(HttpStatusCode.OK)

// TODO Exception handling
}
}
}
}
}

Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
) {
Expand Down Expand Up @@ -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,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -13,13 +15,14 @@ inline val <reified T> 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)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,36 +3,36 @@ 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"

[[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

[[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/"
Expand All @@ -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"
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
1 change: 1 addition & 0 deletions apps/bekreftelse-api/src/main/resources/openapi/api.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -216,6 +216,7 @@ components:
- instance
example:
type: "about:blank"
code: "BRUKER_HAR_IKKE_TILGANG"
title: "Forbidden"
status: 403
detail: "Access denied"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ class ApplicationTestContext {
val poaoTilgangClientMock = mockk<PoaoTilgangClient>()
val bekreftelseKafkaProducerMock = mockk<BekreftelseKafkaProducer>()
val bekreftelseHttpConsumerMock = mockk<BekreftelseHttpConsumer>()
val authorizationService = AuthorizationService(kafkaKeysClientMock, poaoTilgangClientMock)
val authorizationService = AuthorizationService(applicationConfig, kafkaKeysClientMock, poaoTilgangClientMock)
val bekreftelseServiceMock = mockk<BekreftelseService>()
val bekreftelseServiceReal = BekreftelseService(
applicationConfig,
Expand Down
2 changes: 1 addition & 1 deletion apps/kafka-key-generator/nais/nais-dev.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -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
29 changes: 9 additions & 20 deletions docker/mocks/config/mock-oauth2-server/config.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,45 +8,34 @@
"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"
}
},
{
"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"
Expand Down

0 comments on commit 3671022

Please sign in to comment.