Autorisation et authentification en Kotlin : aperçu des outils et exemples pratiques
Dans le développement web moderne en Kotlin, la sécurité d'une application commence par une implémentation correcte de l'authentification (vérification de l'identité de l'utilisateur) et de l'autorisation (vérification des droits d'accès). Dans cet article, nous allons détailler les principales bibliothèques et approches pour créer des applications sécurisées en Kotlin — à la fois pour la partie serveur (Ktor, Spring Boot) et pour les applications mobiles Android.
1. Concepts de base : Authentication vs Authorization
Authentification (Authentication) — c'est le processus de vérification de l'identité de l'utilisateur (login + mot de passe, jeton, biométrie).
Autorisation (Authorization) — c'est la détermination des ressources et actions accessibles à un utilisateur authentifié (rôles, droits).
En Kotlin, ces deux tâches sont résolues à l'aide de bibliothèques spécialisées, que nous allons examiner ci-dessous.
2. Authentification avec Ktor (framework serveur)
Ktor est un serveur asynchrone moderne de JetBrains. Il fournit un module intégré ktor-server-auth pour l'authentification.
Installation de la dépendance (Gradle)
implementation("io.ktor:ktor-server-auth:$ktor_version")implementation("io.ktor:ktor-server-auth-jwt:$ktor_version") // pour JWTExemple : authentification par jeton JWT
import io.ktor.server.auth.*import io.ktor.server.auth.jwt.*import com.auth0.jwk.JwkProviderimport io.ktor.server.application.*
fun Application.configureAuth() { install(Authentication) { jwt("auth-jwt") { val jwkProvider = JwkProvider("https://your-auth-domain/.well-known/jwks.json") verifier(jwkProvider) validate { credential -> if (credential.payload.audience.contains("my-app")) { JWTPrincipal(credential.payload) } else null } } }}
// Dans les routes :authenticate("auth-jwt") { get("/protected") { val principal = call.principal<JWTPrincipal>() call.respondText("Accès autorisé pour l'utilisateur : ${principal?.payload?.subject}") }}3. Spring Security pour Kotlin
Spring Security est la norme de facto pour sécuriser les applications Spring Boot. En Kotlin, il est utilisé avec une configuration DSL.
Ajout au projet (Gradle)
implementation("org.springframework.boot:spring-boot-starter-security")implementation("org.springframework.boot:spring-boot-starter-web")Configuration de SecurityConfig en Kotlin
import org.springframework.context.annotation.Beanimport org.springframework.context.annotation.Configurationimport org.springframework.security.config.annotation.web.builders.HttpSecurityimport org.springframework.security.config.annotation.web.configuration.EnableWebSecurityimport org.springframework.security.core.userdetails.Userimport org.springframework.security.provisioning.InMemoryUserDetailsManagerimport org.springframework.security.web.SecurityFilterChain
@Configuration@EnableWebSecurityclass SecurityConfig {
@Bean fun filterChain(http: HttpSecurity): SecurityFilterChain { http .authorizeHttpRequests { auth -> auth.requestMatchers("/admin/**").hasRole("ADMIN") .requestMatchers("/user/**").hasAnyRole("USER", "ADMIN") .anyRequest().authenticated() } .httpBasic() return http.build() }
@Bean fun users(): InMemoryUserDetailsManager { val user = User.withDefaultPasswordEncoder() .username("user").password("pass").roles("USER").build() val admin = User.withDefaultPasswordEncoder() .username("admin").password("admin").roles("ADMIN").build() return InMemoryUserDetailsManager(user, adm