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