OAuth 2.0 和 JWT 授权在 Kotlin 中的完整指南

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

OAuth 2.0 和 JWT 在 Kotlin 中的入门介绍

现代 Web 应用程序和移动服务需要可靠且安全的身份验证和授权系统。该领域最流行的两个标准是 OAuth 2.0 和 JWT(JSON Web Token)。在本文中,我们将详细讲解如何使用 Kotlin 语言和 Spring Boot 框架实现 OAuth 2.0 和 JWT 授权。您将学习如何配置授权服务器、生成和验证令牌,以及保护您的 API 端点。



OAuth 2.0 和 JWT 基础



什么是 OAuth 2.0?

OAuth 2.0 是一种授权协议,它允许第三方应用程序在不传递用户凭证(用户名和密码)的情况下,获得对用户资源的有限访问权限。取而代之的是,在成功身份验证后颁发一个访问令牌。OAuth 2.0 的主要参与者包括:

  • Resource Owner(资源所有者)—— 用户。
  • Client(客户端)—— 请求访问的应用程序。
  • Authorization Server(授权服务器)—— 颁发令牌的服务器。
  • Resource Server(资源服务器)—— 提供受保护数据的服务器。


什么是 JWT?

JWT(JSON Web Token)是一种紧凑且自包含的令牌格式,它以 JSON 对象的形式包含用户信息(claims)。令牌使用密钥或非对称加密进行签名,从而保证其完整性。JWT 的结构由三部分组成,各部分之间用点分隔:

  • Header(头部)—— 包含令牌类型和签名算法的头部。
  • Payload(负载)—— 包含数据(例如,userId, role, exp)的有效载荷。
  • Signature(签名)—— 基于 header 和 payload 创建的签名。

JWT 示例:eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIn0.ZL1mK9WpXoQ



使用 Spring Security 配置 Kotlin 项目



添加依赖

首先,我们创建一个新的基于 Kotlin 的 Spring Boot 项目。在 build.gradle.kts 文件中添加以下依赖:

dependencies {    implementation("org.springframework.boot:spring-boot-starter-web")    implementation("org.springframework.boot:spring-boot-starter-security")    implementation("org.springframework.boot:spring-boot-starter-data-jpa")    implementation("io.jsonwebtoken:jjwt-api:0.11.5")    runtimeOnly("io.jsonwebtoken:jjwt-impl:0.11.5")    runtimeOnly("io.jsonwebtoken:jjwt-jackson:0.11.5")    implementation("com.h2database:h2")}

我们使用 jjwt 库来处理 JWT,并使用 H2 作为测试数据库。



Security 配置

创建一个 SecurityConfig 类,用于配置 Spring Security 并禁用默认的登录表单:

@Configuration@EnableWebSecurityclass SecurityConfig(private val jwtAuthFilter: JwtAuthFilter) {

@Bean fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { http .csrf { it.disable() } .authorizeHttpRequests { auth -> auth.requestMatchers("/api/auth/**").permitAll() .anyRequest().authenticated() } .sessionManagement { it.sessionCreationPolicy(SessionCreationPolicy.STATELESS) } .addFilterBefore(jwtAuthFilter, UsernamePasswordAuthenticationFilter::class.java) return http.build() }}

我们允许无需身份验证即可访问 /api/auth/** 端点,而所有其他请求都需要 JWT 令牌。



在 Kotlin 中实现 OAuth 2.0 和 JWT



生成和验证 JWT 令牌

创建一个 JwtService 服务,负责创建和

博客

书籍推荐