【问题标题】:Scala/Play http authentication issue - getting user name and password from requestScala/Play http 身份验证问题 - 从请求中获取用户名和密码
【发布时间】:2014-02-28 22:35:50
【问题描述】:

我正在使用 Firefox“REST Easy”插件在我的 Play 应用程序中测试 HTTP 身份验证。这是请求 URL 在 Firebug 中的样子:

http://username:password@localhost:9001/test

我的 Play 控制器中的方法如下所示:

def test = Action { implicit request =>

    request.headers.get("Authorization") match {
        case Some(header) => println(header)
        case None => {
            println("send user name and password")
            Unauthorized.withHeaders("WWW-Authenticate" -> "Basic realm=\"myrealm\"")
        }           
    }

    Ok("")

}

我在控制台中收到“发送用户名和密码”,但没有其他任何反应。我做错了什么,如何从请求中获取用户名和密码?

【问题讨论】:

  • 你检查标题了吗?您阅读了 Authorization 标头 - 不是 http 参数。
  • @ajozwik 你是什么意思?我虽然基本的 HTTP 身份验证 - 用户名和密码 - 是在标头中传递的,不是吗?
  • 看起来您需要选择“身份验证”选项卡并在那里输入用户名/密码。就像 RedmarKerkhoff 的 curl 回答一样,应该将其转换为正确的基本授权标头。如果是插件的问题,我可以验证 FF 插件 RESTClient 的基本授权确实构造了正确的标头(针对 Scalatra 进行了测试)。
  • LOL 在端口号。

标签: scala http authentication playframework playframework-2.0


【解决方案1】:

您的代码运行良好,问题出在您使用的浏览器插件上。不知何故,它不适用于基本身份验证,因为如果您将 println(request.headers) 调用添加为动作主体的第一行,您可以看到它不在其中,而如果您使用 curl,它就在那里!

我在您给定的代码中使用了以下命令:

curl --user name:password http://localhost:9000/test

结果是:

Basic bmFtZTpwYXNzd29yZA==

所以它起作用了!

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-28
  • 1970-01-01
  • 1970-01-01
  • 2017-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多