diff --git a/felles/abac/src/main/java/no/nav/vedtak/sikkerhet/abac/PdpRequestBuilder.java b/felles/abac/src/main/java/no/nav/vedtak/sikkerhet/abac/PdpRequestBuilder.java index 12ab85014..c9ce6decf 100644 --- a/felles/abac/src/main/java/no/nav/vedtak/sikkerhet/abac/PdpRequestBuilder.java +++ b/felles/abac/src/main/java/no/nav/vedtak/sikkerhet/abac/PdpRequestBuilder.java @@ -9,9 +9,4 @@ default String abacDomene() { } AppRessursData lagAppRessursData(AbacDataAttributter dataAttributter); - - default boolean internAzureConsumer(String azpName) { - return false; - } - } diff --git a/felles/abac/src/main/java/no/nav/vedtak/sikkerhet/abac/PepImpl.java b/felles/abac/src/main/java/no/nav/vedtak/sikkerhet/abac/PepImpl.java index 4b7caf1aa..2b1e63601 100644 --- a/felles/abac/src/main/java/no/nav/vedtak/sikkerhet/abac/PepImpl.java +++ b/felles/abac/src/main/java/no/nav/vedtak/sikkerhet/abac/PepImpl.java @@ -3,15 +3,12 @@ import static no.nav.vedtak.sikkerhet.abac.AbacResultat.AVSLÅTT_ANNEN_ÅRSAK; import static no.nav.vedtak.sikkerhet.abac.AbacResultat.GODKJENT; -import java.util.Set; - import jakarta.enterprise.context.ApplicationScoped; import jakarta.enterprise.inject.Default; import jakarta.inject.Inject; import no.nav.foreldrepenger.konfig.Cluster; import no.nav.foreldrepenger.konfig.Environment; -import no.nav.foreldrepenger.konfig.KonfigVerdi; import no.nav.vedtak.sikkerhet.abac.beskyttet.AvailabilityType; import no.nav.vedtak.sikkerhet.abac.internal.BeskyttetRessursAttributter; import no.nav.vedtak.sikkerhet.abac.pdp.AppRessursData; @@ -29,69 +26,65 @@ public class PepImpl implements Pep { private PdpKlient pdpKlient; private PdpRequestBuilder builder; - private Set pipUsers; - private TokenProvider tokenProvider; private String preAuthorized; private Cluster residentCluster; private String residentNamespace; - public PepImpl() { + PepImpl() { + // CDI proxy } @Inject - public PepImpl(PdpKlient pdpKlient, - TokenProvider tokenProvider, - PdpRequestBuilder pdpRequestBuilder, - @KonfigVerdi(value = "pip.users", required = false) String pipUsers) { + public PepImpl(PdpKlient pdpKlient, PdpRequestBuilder pdpRequestBuilder) { this.pdpKlient = pdpKlient; this.builder = pdpRequestBuilder; - this.tokenProvider = tokenProvider; - this.pipUsers = konfigurePipUsers(pipUsers); this.preAuthorized = ENV.getProperty(AzureProperty.AZURE_APP_PRE_AUTHORIZED_APPS.name()); // eg json array av objekt("name", "clientId") this.residentCluster = ENV.getCluster(); this.residentNamespace = ENV.namespace(); } - protected Set konfigurePipUsers(String pipUsers) { - if (pipUsers != null) { - return Set.of(pipUsers.toLowerCase().split(",")); - } - return Set.of(); - } - @Override public Tilgangsbeslutning vurderTilgang(BeskyttetRessursAttributter beskyttetRessursAttributter) { var appRessurser = builder.lagAppRessursData(beskyttetRessursAttributter.getDataAttributter()); - if (PIP.equals(beskyttetRessursAttributter.getResourceType())) { - return vurderTilgangTilPipTjeneste(beskyttetRessursAttributter, appRessurser); - } - if (kanForetaLokalTilgangsbeslutning(beskyttetRessursAttributter)) { - return new Tilgangsbeslutning(harTilgang(beskyttetRessursAttributter) ? GODKJENT : AVSLÅTT_ANNEN_ÅRSAK, beskyttetRessursAttributter, appRessurser); + if (kanForetaLokalTilgangsbeslutning(beskyttetRessursAttributter.getToken())) { + return vurderLokalTilgang(beskyttetRessursAttributter, appRessurser); + } else if (PIP.equals(beskyttetRessursAttributter.getResourceType())) { // pip tilgang bør vurderes kun lokalt + return new Tilgangsbeslutning(AVSLÅTT_ANNEN_ÅRSAK, beskyttetRessursAttributter, appRessurser); } + return pdpKlient.forespørTilgang(beskyttetRessursAttributter, builder.abacDomene(), appRessurser); } + protected Tilgangsbeslutning vurderLokalTilgang(BeskyttetRessursAttributter beskyttetRessursAttributter, AppRessursData appRessursData) { + var token = beskyttetRessursAttributter.getToken(); + var harTilgang = harTilgang(token.getBrukerId(), beskyttetRessursAttributter.getAvailabilityType()); + return new Tilgangsbeslutning(harTilgang ? GODKJENT : AVSLÅTT_ANNEN_ÅRSAK, beskyttetRessursAttributter, appRessursData); + } + // AzureAD CC kommer med sub som ikke ikke en bruker med vanlige AD-grupper og roller // Token kan utvides med roles og groups - men oppsettet er langt fra det som er kjent fra STS mv. // Kan legge inn filter på claims/roles intern og/eller ekstern. - private boolean kanForetaLokalTilgangsbeslutning(BeskyttetRessursAttributter attributter) { - var identType = attributter.getToken().getIdentType(); - var consumer = attributter.getToken().getBrukerId(); - return OpenIDProvider.AZUREAD.equals(attributter.getToken().getOpenIDProvider()) - && IdentType.Systemressurs.equals(identType) && consumer != null && preAuthorized != null; + private boolean kanForetaLokalTilgangsbeslutning(Token token) { + var identType = token.getIdentType(); + var consumer = token.getBrukerId(); + + return OpenIDProvider.AZUREAD.equals(token.getOpenIDProvider()) && + IdentType.Systemressurs.equals(identType) && + consumer != null && + preAuthorized != null; } - private boolean harTilgang(BeskyttetRessursAttributter attributter) { - var consumer = attributter.getToken().getBrukerId(); - if (consumer == null || !preAuthorized.contains(consumer)) { + private boolean harTilgang(String consumerId, AvailabilityType availabilityType) { + if (consumerId == null || !preAuthorized.contains(consumerId)) { return false; } - if (erISammeKlusterKlasseOgNamespace(consumer) || builder.internAzureConsumer(consumer)) { + if (erISammeKlusterKlasseOgNamespace(consumerId)) { return true; } - return AvailabilityType.ALL.equals(attributter.getAvailabilityType()); + + return AvailabilityType.ALL.equals(availabilityType); } private boolean erISammeKlusterKlasseOgNamespace(String consumer) { @@ -105,15 +98,4 @@ private boolean erISammeKlusterKlasseOgNamespace(String consumer) { return residentCluster.isSameClass(Cluster.of(consumerCluster)) && residentNamespace.equals(consumerNamespace); } - protected Tilgangsbeslutning vurderTilgangTilPipTjeneste(BeskyttetRessursAttributter beskyttetRessursAttributter, AppRessursData appRessursData) { - String uid = tokenProvider.getUid(); - if (pipUsers.contains(uid.toLowerCase())) { - return new Tilgangsbeslutning(GODKJENT, beskyttetRessursAttributter, appRessursData); - } else if (kanForetaLokalTilgangsbeslutning(beskyttetRessursAttributter) && harTilgang(beskyttetRessursAttributter)) { - return new Tilgangsbeslutning(GODKJENT, beskyttetRessursAttributter, appRessursData); - } else { - return new Tilgangsbeslutning(AVSLÅTT_ANNEN_ÅRSAK, beskyttetRessursAttributter, appRessursData); - } - } - } diff --git a/felles/abac/src/main/java/no/nav/vedtak/sikkerhet/abac/Tilgangsbeslutning.java b/felles/abac/src/main/java/no/nav/vedtak/sikkerhet/abac/Tilgangsbeslutning.java index d8811bc40..761bf2337 100644 --- a/felles/abac/src/main/java/no/nav/vedtak/sikkerhet/abac/Tilgangsbeslutning.java +++ b/felles/abac/src/main/java/no/nav/vedtak/sikkerhet/abac/Tilgangsbeslutning.java @@ -3,7 +3,8 @@ import no.nav.vedtak.sikkerhet.abac.internal.BeskyttetRessursAttributter; import no.nav.vedtak.sikkerhet.abac.pdp.AppRessursData; -public record Tilgangsbeslutning(AbacResultat beslutningKode, BeskyttetRessursAttributter beskyttetRessursAttributter, +public record Tilgangsbeslutning(AbacResultat beslutningKode, + BeskyttetRessursAttributter beskyttetRessursAttributter, AppRessursData appRessursData) { public boolean fikkTilgang() { diff --git a/felles/abac/src/test/java/no/nav/vedtak/sikkerhet/abac/PepImplTest.java b/felles/abac/src/test/java/no/nav/vedtak/sikkerhet/abac/PepImplTest.java index 9f0d20b8d..128b04473 100644 --- a/felles/abac/src/test/java/no/nav/vedtak/sikkerhet/abac/PepImplTest.java +++ b/felles/abac/src/test/java/no/nav/vedtak/sikkerhet/abac/PepImplTest.java @@ -55,18 +55,18 @@ static void avsluttEnv() { @BeforeEach void setUp() { - pep = new PepImpl(pdpKlientMock, tokenProvider, pdpRequestBuilder, "SRVFPLOS,SRVPDP"); + pep = new PepImpl(pdpKlientMock, pdpRequestBuilder); } @Test - void skal_gi_tilgang_til_srvpdp_for_piptjeneste() { + void skal_ikke_gi_tilgang_til_srvpdp_for_piptjeneste_siden_sts_brukere_ikke_stottes_lenger() { when(tokenProvider.getUid()).thenReturn("srvpdp"); var attributter = lagBeskyttetRessursAttributterPip(); when(pdpRequestBuilder.lagAppRessursData(any())).thenReturn(AppRessursData.builder().build()); Tilgangsbeslutning permit = pep.vurderTilgang(attributter); - assertThat(permit.fikkTilgang()).isTrue(); + assertThat(permit.fikkTilgang()).isFalse(); verifyNoInteractions(pdpKlientMock); }