2

jakartacommonshttpクライアントを使用しようとしています。サーバーと通信するためにKerberos認証を実行します。認証は常に失敗します。深く掘り下げてみると、Kerberosトークンヘッダーにキャリッジリターンラインフィード文字が含まれていることがわかりました。これが問題の根本的な原因です。なぜ\r\ n文字が含まれているのですか、それが問題なのはなぜですか?

4

1 に答える 1

4

\ r \ rはHTTP制御文字であるため、Kerberosトークンの\ r\n文字が問題になります。つまり、サーバーはトークンの最初の行のみを認識し、残りを無視するため、認証に失敗します。さらに悪いことに、トークンの次のようなものは新しいヘッダーとして扱われ、適切にフォーマットされません。そのため、httpサーバーはおかしくなります。

これが発生する理由は、RFC 1521仕様では、base64エンコーディングの行の長さが76文字に制限されていると規定されているためです。したがって、\ r\n文字。そして、これはHTTPプロトコルではうまく機能しません。これは、base64でエンコードされたKerberosトークンを使用する場合にのみ表示されます。

したがって、これに対する解決策は、Kerberosbase64でエンコードされたトークンヘッダーから\r\n文字を取り除くことです。また、古いバージョンのapache commons codecは、base64エンコーディングを76行に制限しないため、問題にはなりません。したがって、エンコーディングに夢中になっている場合は、問題のある文字を取り除きます。そうしない場合は、commons-httpclientで古いバージョンのapachecommonsコードを使用してください。

于 2010-06-10T20:21:47.560 に答える