我在Scala中使用Play Framework 2建立一个应用程序。它将完全是RESTful,目前从Javascript单页面应用程序调用。
集成基于令牌的身份验证的最佳方法是什么? Play2有多个身份验证库,加上原始Secured
特征,但不清楚哪一个最方便。
感谢您的帮助和建议
答案 0 :(得分:6)
如果您在说“基于令牌”时引用JWT,您可能需要查看在Play2中实现HTTP基本身份验证的this example,以及this answer:如何实现关于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
}
}
答案 1 :(得分:4)
我认为你应该看看James Ward的方法here。
这种方法很简单:
如果您想深入了解详细信息,请随时提出更多问题!