8000 GitHub - Oddsor/poao-tilgang: Felles tjeneste for tilgangskontroll i Produktområde Arbeidsoppfølging
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

Oddsor/poao-tilgang

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Felles tilgangskontroll for Produktområde Arbeidsoppfølging

Bugs Code Smells Vulnerabilities

Maintainability Rating Security Rating

API for tilgangskontroll med regler som er felles for Produktområde Arbeidsoppfølging. Har også en HTTP-klient som kan trekkes inn som en avhengighet i applikasjoner for å kalle API'et.

Bruk av HTTP-klient

1.Legg til jitpack som repository

Det er anbefalt å legge til Jitpack til slutt for å først søke igjennom andre repositories for avhengigheter.

Maven:

    <repositories>
        <!-- Legger til central eksplisitt for prioritet over jitpack -->
        <repository>
            <id>central</id>
            <url>https://repo.maven.apache.org/maven2</url>
        </repository>
        <repository>
            <id>jitpack</id>
            <url>https://jitpack.io</url>
        </repository>
    </repositories>

Gradle:

repositories {
    // Legger til central eksplisitt for prioritet over jitpack
    mavenCentral()
    maven { url "https://jitpack.io" }
}

2. Legg til dependency for klienten

Hent siste versjon av klienten på https://github.com/navikt/poao-tilgang/releases og legg til avhengigheten. NB: Jitpack bygger avhengigheter lazy, dvs når noen først prøver å laste avhengigheten ned. Hvis du er den første som laster ned en ny versjon, så kan det potensielt ta noen minutter før avhengigheten er bygget ferdig.

Maven:

<dependency>
    <groupId>com.github.navikt.poao-tilgang</groupId>
    <artifactId>client</artifactId>
    <version>YYYY.MM.DD_HH.mm-SHA</version>
</dependency>

Gradle:

dependencies {
    implementation 'com.github.navikt.poao-tilgang:client:YYYY.MM.DD_HH.mm-SHA'
}

3. Legg til applikasjonen din i poao-tilgang sin ACL

# nais-(dev|prod).yaml
 accessPolicy:
   inbound:
     rules:
       - application: <application>
         namespace: <namespace>
         cluster: <cluster>

4. Opprett en instans av klienten

 val client: PoaoTilgangClient = PoaoTilgangCachedClient(
    PoaoTilgangHttpClient(
        baseUrl = "http://poao-tilgang.poao.svc.cluster.local", // or use "https://poao-tilgang(.dev).intern.nav.no" if your sending the request from dev-fss/prod-fss
        tokenProvider = { "machine-to-machine token" }
    )
)

5. Ta klienten i bruk

val decision = client.evaluatePolicy(NavAnsattTilgangTilEksternBrukerPolicyInput(
    navAnsattAzureId = UUID.fromString("some id"), // Dette kan hentes fra "oid"-claimet til en NAV ansatt sitt Azure AD JWT token 
    tilgangType = TilgangType.LESE,
    norskIdent = "01234567890" // fnr, dnr etc
)).getOrThrow()

println("Nav ansatt har lesetilgang til bruker: ${decision.isPermit}")

Klient API

interface PoaoTilgangClient {

	/**
	 * Evaluer en policy med gitt input, sjekk {@link no.nav.poao_tilgang.client.PolicyInput.kt} for hvilke policies som er tilgjengelig
	 */
	fun evaluatePolicy(input: PolicyInput): ApiResult<Decision>

	/**
	 * Evaluer flere policies, sjekk {@link no.nav.poao_tilgang.client.PolicyInput.kt} for hvilke policies som er tilgjengelig
	 */
	fun evaluatePolicies(requests: List<PolicyRequest>): ApiResult<List<PolicyResult>>

	/**
	 * Henter alle Azure AD-grupper til en NAV Ansatt ved bruk av objekt IDen til den ansatte
	 */
	fun hentAdGrupper(navAnsattAzureId: UUID): ApiResult<List<AdGruppe>>

	/**
	 * Henter om en enkelt person er skjermet. Skjermet person var tidligere kjent som "egen ansatt"
	 */
	fun erSkjermetPerson(norskIdent: NorskIdent): ApiResult<Boolean>

	/**
	 * Henter om flere personer er skjermet. Skjermet person var tidligere kjent som "egen ansatt"
	 */
	fun erSkjermetPerson(norskeIdenter: List<NorskIdent>): ApiResult<Map<NorskIdent, Boolean>>

}

Tilgjengelig policies

/*
 Sjekker om en NAV ansatt har lese- eller skrivetilgang til en ekstern bruker.
 For funksjoner som gjør endringer på data så ønsker man oftest å benytte sjekk på skrivetilgang,
 mens for funksjoner som kun henter data sÃ
6792
¥ benyttes oftest lesetilgang.
 
 Veiledere har både lese- og skrivetilgang, mens f.eks NKS har kun lesetilgang.
*/
data class NavAnsattTilgangTilEksternBrukerPolicyInput(
	val navAnsattAzureId: UUID,
	val tilgangType: TilgangType,
	val norskIdent: String
) : PolicyInput()

/* 
 Sjekker om en NAV ansatt har tilgang til å bruke Modia-flaten
*/
data class NavAnsattTilgangTilModiaPolicyInput(
	val navAnsattAzureId: UUID
) : PolicyInput()

/* 
 Sjekker om en NAV ansatt har tilgang til spesifik NAVenhet
*/
data class NavAnsattTilgangTilNavEnhetPolicyInput(
    val navAnsattAzureId: UUID,
    val navEnhetId: String
) : PolicyInput()

/* 
 Sjekker om en NAV ansatt kan behandle **strengt** fortrolig brukere (kode 6)
*/
data class NavAnsattBehandleStrengtFortroligBrukerePolicyInput(
    val navAnsattAzureId: UUID
) : PolicyInput()

/* 
 Sjekker om en NAV ansatt kan behandle fortrolig brukere (kode 7)
*/
data class NavAnsattBehandleFortroligBrukerePolicyInput(
    val navAnsattAzureId: UUID
) : PolicyInput()

/* 
 Sjekker om en NAV ansatt kan behandle skjermede personer (egne ansatte)
*/
data class NavAnsattBehandleSkjermedePersonerPolicyInput(
    val navAnsattAzureId: UUID
) : PolicyInput()


/* 
 Sjekker om en NAV ansatt har tilgang til NAV enhet med sperre. Brukes i forbindelse med KVP.
*/
data class NavAnsattTilgangTilNavEnhetMedSperrePolicyInput(
    val navAnsattAzureId: UUID,
    val navEnhetId: String
) : PolicyInput()

Prosjektstruktur

Poao-tilgang er delt opp i flere moduler for å gjøre det enklere å vedlikeholde en tydelig arkitektur.

Modulene er som følger:

  • api - felles DTOer som brukes av client-modulen og application-modulen
  • application - kjører opp applikasjonen, definerer endepunkter, etc. Tar i bruk core-modulen for Ã¥ eksponere tilgangskontrollregler med et REST API
  • client - brukes ikke direkte av poao-tilgang, men av andre konsumerende applikasjoner som ønsker en ferdig testet klient for Ã¥ gjøre requests mot poao-tilgang
  • core - inneholder implementasjon og definisjon av alle de ulike tilgangskontrollreglene til poao-tilgang

About

Felles tjeneste for tilgangskontroll i Produktområde Arbeidsoppfølging

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Kotlin 100.0%
0