commons http client - kerberos token在谈判时有\ r \ n(回车换行)字符

时间:2010-06-10 20:17:13

标签: java kerberos apache-commons-httpclient apache-commons-codec

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

1 个答案:

答案 0 :(得分:3)

kerberos令牌中的

\ r \ n字符是一个问题,因为\ r \ n是一个HTTP控件字符。这实质上意味着服务器只看到令牌的第一行而忽略了休息因此失败的身份验证。更糟糕的是,令牌的下一个喜欢被视为新标题,并且格式不正确。所以http服务器会吓坏。

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

解决这个问题的方法是从kerberos base64编码的标记头中删除\ r \ n字符。此外,旧版本的apache commons编解码器不会将base64编码限制为76行,因此不是问题。因此,如果您已经挂钩编码,请删除有问题的字符。如果不这样做,那么使用旧版本的apache commons代码和commons-httpclient。