4

リクエストにBASIC認証ヘッダーが存在する必要があるWebサービスがあります。そうでない場合、サービスはHTTP 401(無許可)を返します。これは機能します-チャレンジが戻ってくると、ブラウザ(この場合はChrome)がポップアップし、資格情報を要求します。その後、将来のリクエストのために保存されます。

私の問題は、サービスへの後続のリクエストごとに2つのリクエストが行われていることです。1つは認証なし(401を受信)で、ブラウザはすぐにヘッダーに正しい認証を返します。

毎回Webサービスから明示的に要求されることなく、ブラウザーに(おそらく特別なヘッダーを介して)資格情報を提供するように強制する方法はありますか?

4

1 に答える 1

3

ブラウザに 401 を強制的にプリエンプトすることはできないと思います。サービスのリクエストが行われると、サービスは HTTP 401 で応答し、WWW-Authenticate Basic ヘッダーと、おそらくレルム (定義できます)。

基本認証標準の実装方法について詳しく説明している基本認証の RFC を参照することをお勧めします。 http://www.ietf.org/rfc/rfc2617.txt

また、独自の HTTP モジュールの実装を検討することもできます。これにより、アプリケーションの柔軟性が向上し、基本認証を処理する方法が得られます。これにより、Authenticate および End Request イベントのイベント ハンドラーを登録し、サービスが基本認証を処理する方法をもう少し明確に指示できます。このための入門書は、asp.net Web サイトで入手できます。 http://www.asp.net/web-api/overview/security/basic-authentication

サービスがアプリケーション認証に基づいて異なる認証を使用する場合 (たとえば、アプリケーションがフォーム認証用に構成されている場合、サービスは基本認証のみを使用します)、HTTP モジュールを使用すると、条件付きで基本認証を使用できます。通常、このシナリオでは、次のようにハンドラーを登録します。

AuthenticationSection config = (AuthenticationSection)WebConfigurationManager.GetSection("system.web/authentication");

if(config.Mode == AuthenticationMode.Forms)
{
    module.Authenticate += OnEnter;
    context.EndRequest += OnLeave;
}
于 2013-04-11T16:25:03.240 に答える