使用 Play 2 框架的基于令牌的身份验证
Posted
技术标签:
【中文标题】使用 Play 2 框架的基于令牌的身份验证【英文标题】:Token based authentication using Play 2 Framework 【发布时间】:2014-04-04 23:39:51 【问题描述】:我正在使用 Scala 中的 Play Framework 2 构建应用程序。它将是纯粹的 RESTful,目前从 javascript 单页应用程序进行调用。
集成基于令牌的身份验证的最佳方式是什么? Play2 有多个身份验证库,以及原始的 Secured
特征,但尚不清楚哪个最方便。
感谢您的帮助和建议
【问题讨论】:
【参考方案1】:我认为你应该看看 James Ward 的方法 here。
简而言之,方法非常简单:
-
用户请求索引页面并加载您的单页应用程序
应用程序尝试确定浏览器的 cookie 中是否存储了安全令牌(或者您可以使用 localStorage)
如果没有令牌 - 显示登录页面
如果存在令牌——我们认为我们已经通过了身份验证
应用尝试使用自定义标头中的令牌(如 X-AUTH-TOKEN)从服务器获取一些数据
服务器验证令牌并在一切正常时返回数据
如果令牌无效服务器响应 401,则从步骤 3 继续
对服务器的每个请求都使用相同的令牌
如果您想更深入地了解细节,请随时提出更多问题!
【讨论】:
您好安德烈,感谢您的回复。我的问题更多的是在游戏中检查身份验证,而不是在 JS 方面。我今天会检查提供的文件。 @ArturSoler 我可以给你一些关于这个主题的例子,但你应该先检查一下存储库,也许你会在那里找到你需要的一切。 好的,我会尽快检查,今天晚些时候,如果我的所有疑虑都解决了,我会通知您。再次感谢!【参考方案2】:如果您在说“基于令牌”时指的是 JWT,您可能需要查看在 Play2 中实现 HTTP 基本身份验证的 this example 和 this answer re:如何在 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
【讨论】:
以上是关于使用 Play 2 框架的基于令牌的身份验证的主要内容,如果未能解决你的问题,请参考以下文章