Ktor 全栈之路 (5):JWT 认证全流程实战 —— 打造安全通信闭环

前言

如果一个后端 API 没有任何认证,那它在互联网上就是裸奔。

对于全栈项目来说,最流行的认证方案莫过于 JWT (JSON Web Token)。它的优势在于"无状态",服务器不需要存储 Session,非常适合 KMP 这种跨多个端(Android, iOS, Web)的场景。

今天我们就来手把手实现在 Ktor 中搭建 JWT 认证防线。


一、 JWT 的三驾马车

  1. Header:类型和加密算法。
  2. Payload :存放用户信息(如 userId, username)和过期时间。
  3. Signature:服务器私钥签名,防止篡改。

二、 后端实战:配置 JWT 校验

首先,在 Ktor 中安装认证插件:

kotlin 复制代码
install(Authentication) {
    jwt("auth-jwt") {
        realm = "Access to 'protected' routes"
        verifier(
            JWT.require(Algorithm.HMAC256("secret-key"))
                .withAudience("my-audience")
                .withIssuer("my-issuer")
                .build()
        )
        validate { credential ->
            if (credential.payload.getClaim("username").asString() != "") {
                JWTPrincipal(credential.payload)
            } else {
                null
            }
        }
    }
}

三、 实战:受保护的路由

配置好后,你可以通过 authenticate 块来保护特定的 API:

kotlin 复制代码
routing {
    // 登录接口:公开访问,返回 Token
    post("/login") {
        val user = call.receive<LoginRequest>()
        val token = generateToken(user) // 生成 JWT
        call.respond(mapOf("token" to token))
    }

    // 个人资料接口:必须带 Token 才能访问
    authenticate("auth-jwt") {
        get("/profile") {
            val principal = call.principal<JWTPrincipal>()
            val username = principal!!.payload.getClaim("username").asString()
            call.respondText("Welcome, $username!")
        }
    }
}

四、 全栈闭环:App 侧的 Token 存储

作为资深 Android 开发,你不仅要写后端,还要考虑 App 怎么存:

  1. 安全存储 :Android 用 EncryptedSharedPreferences,iOS 用 Keychain
  2. 自动注入 :利用 Ktor Client 的 Auth 插件,在每次发请求时自动在 Header 中加上 Authorization: Bearer <token>

五、 安全建议

  1. 绝不在 Payload 中存敏感信息 :记住,JWT 的 Payload 只是 Base64 编码,任何人都可以解码看里面的内容。它防的是篡改,不防偷看。不要把用户密码、手机号放进去。
  2. 使用 Refresh Token 机制:Access Token 设置短寿命(如 1 小时),Refresh Token 设置长寿命(如 30 天)。这能极大提升安全性。
  3. 私钥管理secret-key 绝对不能写死在代码里!生产环境必须通过环境变量或 AWS Secrets Manager 获取。

结语

掌握了 JWT,你就打通了前后端信任的"最后一公里"。你的 Ktor 后端现在已经具备了初步的商用安全性。

下一篇是大结局:Ktor 生产级调优:HTTPS、限流与监控

相关推荐
一航jason3 小时前
安卓车机端 AIOS 技术生态全景
android·人工智能·ai·ai编程·ai-native
天远Date Lab3 小时前
零信任架构实战:基于天远天远风控经营异常预警构建分布式企业合规监控网关
人工智能·分布式·架构
深念Y3 小时前
ZTE B860AV1.1-T2 机顶盒改造记录:从 Android 到 Linux 服务器
android·linux·运维·服务器·boot·cma·机顶盒
老郑聊AI业财智造3 小时前
从“思考-行动”到“知行合一”:ReActAgent的架构原理与工程实践全景剖析
人工智能·架构·系统架构·软件工程·软件构建
淡淡的香烟4 小时前
Android中tcp的通信
android·物联网·tcp/ip
Escalating_xu6 小时前
【C++入门基础(下)】默认参数、函数重载、引用、inline 与 nullptr
android·c++·redis
ZGIAI12 小时前
ZGI Skill Loop:给工具调用设边界
人工智能·架构
ZGIAI13 小时前
ZGI 工作区权限:用户为何看不到资源
人工智能·架构
FlagOS智算系统软件栈13 小时前
Qwen3.8-Flash-Next发布首日适配 8 款AI芯片,众智FlagOS跑通并优化新一代混合注意力架构
人工智能·架构
Hrain-AI13 小时前
Qwen4 架构预览解读:GDN+QSA 混合注意力如何把激活参数压到 6B
人工智能·架构·开源