【问题标题】:Grails Base64 decoding of Authorization header malformed on decode授权标头的 Grails Base64 解码在解码时格式错误
【发布时间】:2013-01-08 15:36:53
【问题描述】:

我有一个 grails 控制器,它对授权标头进行 base64 解码。我使用 CURL 从 PHP 脚本发送了这个。

curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($ch, CURLOPT_USERPWD, "testindia01@test.com:india123");

我的 grails 控制台日志显示:

Authorization raw: Basic dGVzdGluZGlhMDFAdGVzdC5jb206aW5kaWExMjM=, isBase64: true
Authorization decoded: ´"q—ïÕ—•πë•Ñ¿≈—ïÕ–πçΩ¥È•πë•у»Ã

在上述情况下,我使用的是 Commons Base64 类,但使用 Groovy 内置的 decodeBase64 会产生相同的结果。

传入的授权原始文件是正确的。如果我复制它并通过 PHP 的 ecode 推送它,那么它会正确解码。

echo base64_decode('dGVzdGluZGlhMDFAdGVzdC5jb206aW5kaWExMjM=');

如果我将字符串直接复制到控制器中,例如

def decode = new String(Base64.encodeBase64("dGVzdGluZGlhMDFAdGVzdC5jb206aW5kaWExMjM="))

那么这也能正确解码。

我通过请求获取头部

def auth = request.getHeader("Authorization")

我测试它是一个有效的base64字符串

Base64.isBase64(auth)

只是解码失败。我已经尝试在解码器上更改编码。

def 解码 = new String(auth.decodeBase64(), "UTF-8")

与 ISO-8859-1 和 Windows-1252 等其他编码一样,但每次都会返回不同的格式错误的字符串。

我也尝试过在 CURL 请求上手动设置 Accept-Encoding。

我没有想法:(

【问题讨论】:

    标签: java grails encoding groovy base64


    【解决方案1】:

    这是因为“基本”已包含在 getHeader 返回值中。如果我把它去掉它就可以了。 Base64.isBase64 只检查字符是否在 base64 字母表中,所以“Basic”一定是。

    【讨论】:

      猜你喜欢
      • 2019-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-29
      • 1970-01-01
      • 2015-09-03
      • 2021-08-19
      • 1970-01-01
      相关资源
      最近更新 更多