Indy HTTP サーバー (TIdHTTPServer) は、Request オブジェクトのプロパティ AuthExists、AuthUser、および AuthPass と Response.AuthRealm プロパティを使用して、 HTTP 基本認証をサポートします。(NTLM またはダイジェスト認証もサポートされているかどうかは確認していません)。
レスポンスで AuthRealm プロパティを設定することにより、基本認証が必要であることがクライアントに通知されます。クライアントがリクエストでユーザー名とパスワードを送信すると、サーバーはコマンド ハンドラーでそれを確認できます。
したがって、実際には、Indy はリソースを保護するための組み込みサポートを提供します。これは、通常のブラウザーと REST クライアントの両方で機能し、リクエストに auth ヘッダーが含まれている場合にのみサーバー リソースにアクセスできます。
Indy ベースの (商用) Web フレームワークにも実装しました。サンプル コードは、サーバー上のすべてのコンテンツを保護し、ユーザー名とパスワードの組み合わせをハード コーディングしています。
procedure TBasicAuthHandlerWrapper.Handle(Target: string; Context:
TdjServerContext;
Request: TIdHTTPRequestInfo; Response: TIdHTTPResponseInfo);
const
AUTH_USER = 'sherlock';
AUTH_PASS = 'holmes';
begin
if Request.AuthExists and ((Request.AuthUsername = AUTH_USER) and
(Request.AuthPassword = AUTH_PASS)) then
begin
// pass
inherited;
end
else
begin
// show login dialog
Response.AuthRealm := 'Welcome to Web Components Server!';
end;
end;
注: この例では、拡張子とパスに関係なく、すべてのリソースを保護します。しかし、これは Request.Document で使用可能なパスの条件を確認することで、メソッド本体に簡単に追加できます。