10

ASP.NET Web サービスを使用して Web サービス インターフェイスを公開するために、動作中の ASP.NET Web アプリケーションをリファクタリングしています。Web Services authentication - best practiceによると、https 経由の Basic Auth が適しています。WS-Security、X509などを行うのではなく、そうであると仮定しましょう..

.NET 3.5/VS 2008 でカスタム http 基本認証 (Windows 以外のアカウント) を実装する最も簡単な方法は何ですか。たとえば、ユーザー名が「foo」でパスワードが「bar」の場合のみ受け入れます。最終的には、設定したいと思いThread.CurrentPrincipalます。

自分で書くHttpModuleべきですか、それとももっと簡単にできますか?

4

3 に答える 3

5

Dominick Baierによって書かれたIIS の Custom Basic Authentication を使用する可能性が高いです。私の質問は、WCF ではなく ASP.NET Web サービスに関するものでしたが、トランスポート セキュリティを介した WCF 3.5 のユーザー名は IIS でホストされたサービスでは使用できないと指摘しています。

Santosh Sahooによるカスタム データソースに対する ASP.NET の基本認証と呼ばれる HTTP モジュールの別の実装があります。

私が望んでいたものではありませんが、QuickStart チュートリアルの SOAP ヘッダーのサンプルが参考になる回避策であることがわかりました。http を介してプレーン テキストでパスワードを送信することは明らかに安全ではありませんが、この例を拡張してセキュリティを強化することもできます。たとえば、https で実行したり、「パスワード + ワンタイム GUID + タイムスタンプ」のハッシュを送信したりできます。

于 2009-02-11T00:04:10.803 に答える
3

ヘッダーの値を取得してAuthorization解析し、ユーザー名/パスワードを検証します。

値はusername:passwordで、Base64文字列としてエンコードされます。

詳細については、 http://en.wikipedia.org/wiki/Basic_access_authenticationを参照してください。

編集:カスタム認証スキームを使用して、すべてのリクエストに対してこれを実行したい場合はHttpModule、ヘッダーの解析とスレッドのプリンシパルの設定を処理するためのを作成する方が簡単です。

于 2009-02-04T05:48:29.300 に答える
1

WCF を検討している場合は、basicHttpBinding に usernameOverTransport セキュリティを使用できます。つまり、ユーザー名とパスワードはリクエストの SOAP ヘッダーにあり、すべてのトラフィックはネットワーク上で SSL 暗号化によって保護されます。

カスタムの UserNamePasswordValidator バリデーターを使用して、データベースなどに対して着信資格情報を認証できます。

サービス動作のカスタム IAuthorizationPolicy 内でスレッド プリンシパルを設定できます。

例: 現在のプリンシパルを設定するための IAuthorizationPolicy のメソッド実装を評価する

public bool Evaluate(EvaluationContext evaluationContext, ref object state)
{
       Object obj;
       if( evaluationContext.Properties.TryGetValue( "Identities", out obj ))
       {
            // get the authenticated identity
            IIdentity client = (obj as IList<IIdentity>)[0];
            evaluationContext.Properties["Principal"] = ... // create principal obj here for the identity
            // this will set thread's current principal
       }
       return true;
}
于 2009-01-29T08:59:46.443 に答える