Alexander Weickmann
01/23/2024, 4:07 PMArjan van Wieringen
01/23/2024, 4:49 PMAlexander Weickmann
01/23/2024, 5:47 PMAnastasios Georgousakis
01/23/2024, 5:54 PMimport com.auth0.jwk.JwkProviderBuilder
import io.ktor.server.application.*
import io.ktor.server.auth.*
import io.ktor.server.auth.jwt.*
import java.net.URL
import java.util.concurrent.TimeUnit
fun Application.configureSecurity() {
val keysUri = URL(environment.config.property("jwt.keysUri").getString())
val issuer = environment.config.property("jwt.issuer").getString()
val audience = environment.config.propertyOrNull("jwt.audience")?.getString()
val jwkProvider = JwkProviderBuilder(keysUri)
.cached(10, 24, TimeUnit.HOURS)
.rateLimited(10, 1, TimeUnit.MINUTES)
.build()
authentication {
jwt {
realm = "Secure Area"
verifier(jwkProvider, issuer) {
withIssuer(issuer)
if (audience != null)
withAudience(audience)
acceptLeeway(10)
}
validate { credential ->
JWTPrincipal(credential.payload)
}
}
}
}
Anastasios Georgousakis
01/23/2024, 6:00 PMjwt {
keysUri = ${JWKS_URI}
issuer = ${JWT_ISSUER_URI}
audience = ${JWT_AUDIENCE}
}
and use environment variables like:
JWKS_URI=https://login.microsoftonline.com/[your_tenant_id]/discovery/v2.0/keys
JWT_ISSUER_URI=https://login.microsoftonline.com/[your_tenant_id]/v2.0
JWT_AUDIENCE=[your_client_id]