美文网首页Kotlin后端开发
ktor结合JWT进行用户身份认证

ktor结合JWT进行用户身份认证

作者: 蓝不蓝编程 | 来源:发表于2019-05-04 11:33 被阅读0次

简要介绍

JWT全称:JSON Web Token,是当前使用非常广泛的跨域身份验证方案. 本文介绍在ktor中如何使用JWT.

使用步骤

  1. build.gradle中添加依赖(maven也类似)
compile "io.ktor:ktor-auth-jwt:$ktor_version"
  1. 添加认证类:Auth
object Auth {
    private const val SECRET_KEY = "secret"
    private val algorithm = Algorithm.HMAC512(SECRET_KEY)
    private const val issuer = "ktor.io"
    private const val validityInMs = 3600*1000 * 10 // 10 hours

    fun makeJwtVerifier(): JWTVerifier = JWT
        .require(algorithm)
        .withIssuer(issuer)
        .build()

    fun sign(name: String): Map<String, String> {
        return mapOf("token" to makeToken(name))
    }

    private fun makeToken(name: String): String = JWT.create()
        .withSubject("Authentication")
        .withIssuer(issuer)
        .withClaim("name", name)
        .withExpiresAt(getExpiration())
        .sign(algorithm)

    private fun getExpiration() = Date(System.currentTimeMillis() + validityInMs)

}
  1. 在启动类中启用jwt
private val verifier = Auth.makeJwtVerifier()
install(Authentication) {
        jwt {
            verifier(verifier)
            validate {
                UserIdPrincipal(it.payload.getClaim("name").asString())
            }
        }
    }
  1. 登陆时进行校验,校验成功后返回token
routing {
    post("login") {
        val user = call.receive<User>()
        //TODO:校验用户、密码有效性的代码自己写
        call.respond(Auth.sign(user.name))
    }
}
  1. 对需要认证后才能访问的接口添加认证关键字authenticate(下面样例是用于访问secret页面的)
routing {
    authenticate {
        route("secret") {
            get {
                val user = call.authentication.principal<UserIdPrincipal>()
                call.respondText("hi ${user?.name}, you are authenticated.", contentType = ContentType.Text.Plain)
            }
        }
    }
}

完整源代码

https://github.com/cxyzy1/ktor_jwt

参考资料

https://github.com/joelsaunders/ktor-starter.git
https://github.com/sjcqs/ktor-quotes.git
https://github.com/QAutomatron/ktor-backend.git
https://github.com/AndreasVolkmann/ktor-auth-jwt-sample.git

点击关注专辑,查看最新技术分享
更多技术总结好文,请关注:「程序园中猿」

相关文章

  • ktor结合JWT进行用户身份认证

    简要介绍 JWT全称:JSON Web Token,是当前使用非常广泛的跨域身份验证方案. 本文介绍在ktor中如...

  • .NET Core5.0 JWT鉴权SSO单点登录

    JWT JWT全称“JSON Web Token”,是基于JSON的用户身份认证的令牌。可跨域身份认证,所以JWT...

  • Spring Boot实战之Filter实现使用JWT进行接口认

    Spring Boot实战之Filter实现使用JWT进行接口认证 jwt(json web token) 用户发...

  • Django中的JWT

    JWT 在用户注册或登录后,我们想记录用户的登录状态,或者为用户创建身份认证的凭证。我们不再使用Session认证...

  • EF+SqlServer/Mysql(三)JWT+Authori

    集成JWT权限认证 为什么要使用JWT,我们先来看看传统的身份校验方式用户向服务器发送用户名和密码->服务器验证通...

  • jwt 用rsa公钥私钥进行验证(python发送,java接受

    JWT的主要应用场景 身份认证在这种场景下,一旦用户完成了登陆,在接下来的每个请求中包含JWT,可以用来验证用户身...

  • JWT

    使用JWT进行跨域身份验证 传统用户身份验证 Internet服务无法与用户身份验证分开.一般过程如下: 用户向服...

  • jwt身份认证

    JWT(JSON Web Tokens) 是一个开放的标准(RFC 7519)定义的一种简洁的、自包含的方法,用于...

  • REST framework JWT Auth

    JWT 在用户注册或登陆后,我们想要记录用户的登陆状态,或者为用户创建身份认证的凭证。我们不再使用Session认...

  • JWT Authentication in Django

    Django中的JWT认证 本教程将介绍JSONWeb令牌(JWT)以及如何在Django中实现JWT身份验证。 ...

网友评论

    本文标题:ktor结合JWT进行用户身份认证

    本文链接:https://www.haomeiwen.com/subject/uzkxoqtx.html