2

我正在尝试使用 jakarta commons http 客户端。进行 kerberos 身份验证以与服务器通信。身份验证总是失败。在深入挖掘时,我发现 kerberos 令牌标头中有回车换行符,这是问题的根本原因。为什么它有 \r\n 字符,为什么这是一个问题?

4

1 回答 1

4

kerberos 令牌中的 \r\n 字符是一个问题,因为 \r 是 HTTP 控制字符。这实质上意味着服务器只看到令牌的第一行并忽略其余部分,因此身份验证失败。更糟糕的是,令牌的下一个喜欢被视为新的标头,并且不会被很好地格式化。所以http服务器会崩溃。

发生这种情况的原因是因为 RFC 1521 规范规定 base64 编码行长度限制为 76 个字符。因此 \r\n 字符。这不适用于 HTTP 协议。仅当您使用 base64 编码的 Kerberos 令牌时,才会出现这种情况。

所以解决这个问题的方法是从 kerberos base64 编码的令牌头中去除 \r\n 字符。此外,旧版本的 apache commons 编解码器不会将 base64 编码限制为 76 行,因此不是问题。因此,如果您对编码感兴趣,请去掉有问题的字符。如果您不使用旧版本的 apache commons 代码和 commons-httpclient。

于 2010-06-10T20:21:47.560 回答