Indy 10 Tidwebdavは、ユーザー名にUnicode文字を持っているユーザーの認証をサポートしていますか?
質問
私が接続しようとしているWebサービスの著者は、私がApache Web ServerのWebDavモジュールに送信しているユーザー名は、ヘッダーのエンコード= UTF-8なしで、またはMime64エンコードなしで入っていることを教えてくれます。ヘッダーには期待されるため、Unicode文字を含む可能性のあるアップロードユーザーのユーザーIDは、受け入れられてデコードされていません。
私が知りたいのは、httpエンコードの方法を変更するTidwebdavに、Plane ASCIIに表示できないUnicode文字を含むユーザー名の認証を可能にする方法で、どういうわけかTidwebdavにプロパティを設定できますか。 AuthenticationManagerプロパティはそれと関係があるかもしれないと思いました。 Indy 9 Documetnationでは、「このプロパティは何もしない」と書かれています。インディ10で何かをしますか?実装されているようです。
私がまだ理解していない謎は次のとおりです。
(1)webdavで「logintype」(整数値を持つ)は何をしますか?また、どのような値を設定しますか?現在、私が持っているコードは3に設定しています。
(2)hoforceencodeparamsでエンコードパラマを強制する必要がありますか?
(3)リモート側がそれらを見る形でヘッダーを検査するにはどうすればよいですか?
更新:Remyが言うように、NTLM認証はUnicode文字をサポートしています。また、「ユーザー名:パスワード」フォームで、基本認証でUnicode UTF8 MIME(base64)エンコードされた文字列を使用できることもわかりました。
解決
の目的 TIdAuthenticationManager
認証パラメーターのキャッシュを使用して、特定のURLに正常にログインすることです。これ以上何もない。 TIdHTTP
認証中にそのキャッシュを使用しませんが、あなたはそれを自分で利用することができます OnSelectAuthentication
と OnAuthentication
必要に応じてイベント。
この状況で実際に使用されている認証スキームはどれですか? WebDAVモジュールは、キャラクターのエンコードが指定されることを期待するヘッダーですか? Indy 10では、NTLMクラスはハッシュ中にUnicode文字列をサポートしていますが、UTF-8ではなくUTF-16を使用しています。
WebDavの著者は、彼が実際にあなたに期待していることについてのより多くの情報を提供できますか?
他の質問に答えるには:
(1)どの「logintype」を参照していますか? Indyにはそのようなプロパティまたはパラメーターはありません。
(2)hoforceencodeparamsは、post()を呼び出すときにのみ適用され、「Application/x-www-form-urlencoded」リクエストのtstringsオブジェクトを送信します。認証には影響しません。
(3)接続を介して前後に送信されているデータを確認するには、 TIdLog...
次のようなコンポーネント TIdLogFile
また TIdLogEvent
, 、に Intercept
財産。または、Wiresharkなどの外部パケットスニファーを使用します。