我正在使用 Scala 中的 Play Framework 2 构建应用程序。它将是纯 RESTful 的,目前从 Javascript 单页应用程序进行调用。
集成基于令牌的身份验证的最佳方式是什么?Play2 有多个身份验证库,以及原始Secured
特征,但尚不清楚哪个最方便。
感谢您的帮助和建议
我正在使用 Scala 中的 Play Framework 2 构建应用程序。它将是纯 RESTful 的,目前从 Javascript 单页应用程序进行调用。
集成基于令牌的身份验证的最佳方式是什么?Play2 有多个身份验证库,以及原始Secured
特征,但尚不清楚哪个最方便。
感谢您的帮助和建议
如果您在说“基于令牌”时指的是 JWT,您可能想看一下在Play2中实现 HTTP 基本身份验证的示例,以及这个答案:如何在 Scala 后端实现 JWT。好的部分是您既不需要 cookie,也不需要经过身份验证的用户的缓存。
为方便起见,包括来自第一个链接的内容:
def Secured[A](username: String, password: String)(action: Action[A]) = Action(action.parser) { request =>
request.headers.get("Authorization").flatMap { authorization =>
authorization.split(" ").drop(1).headOption.filter { encoded =>
new String(org.apache.commons.codec.binary.Base64.decodeBase64(encoded.getBytes)).split(":").toList match {
case u :: p :: Nil if u == username && password == p => true
case _ => false
}
}.map(_ => action(request))
}.getOrElse {
Unauthorized.withHeaders("WWW-Authenticate" -> """Basic realm="Secured"""")
}
}
使用如下:
def myAction = Secured("admin", "1234secret") {
Action { request =>
Ok
}
}
我认为您应该在这里看看 James Ward 的方法。
简而言之,这种方法非常简单:
如果您想更深入地了解细节,请随时提出更多问题!