0

これは、ディスカッションタイプの質問です。私は、さまざまなアセンブリに実装できる多数のインターフェイスを備えたシステムで作業しており、それらのアセンブリは、必要に応じて実行時にロードされます。このようなインターフェースの例はですINotifier。これは、実装する必要がある一般的な通知機能です。

using System;
using System.Collections.Generic;
using System.Linq;
using Company.MainModule.CentralLogging;

namespace Company.NotificationEngine
{
        public interface INotifier
        {
                 IAsyncResult BeginInvoke(Dictionary<String, object> parameters,AsyncCallback callBack,object state, LogMaster logMaster);
                 Dictionary<string,object> EndInvoke(IAsyncResult asyncResult);   
        }
}

ここで、INotifierの実装例:

namespace Company.NotificationEngine
{
    internal class SMSNotification : INotifier
    {

        #region Class Variables

        public IAsyncResult BeginInvoke(Dictionary<string, object> parameters, AsyncCallback callBack, object state, LogMaster logMaster)
        {
            // Send SMS
            return asyncResult;
        }

        public Dictionary<string, object> EndInvoke(IAsyncResult asyncResult)
        {
            return null;
        }


        #region Private Functions

    }
}

次に、同じパターンに従って、と呼ばれる汎用パスワードジェネレータを作成しますIGenerator。これには2つの関数が必要です:GeneratePasswordValidatePassword。はGeneratePassword、実装アセンブリが定義するアルゴリズムに基づいてパスワードを生成します。これValidatePasswordは、クライアントごとに複雑さの異なるパスワード要件があるため、必要な要件です。パスワードが生成されたら、検証する必要があります。

最近、.NETFramework4.5とVisualStudio2012に切り替えました。これらの方法はどちらも時間がかかる場合があります。はGeneratePassword、単純なAlphaNumericパスワードまたはパスワードの複数ページのマトリックスを生成している可能性があります。同様にValidatePassword、生成されたパスワードをHTTP経由でクライアントのパスワード検証サーバー/APIに送信している可能性があります。現在、BeginInvoke/EndInvokeパターンを使用しています。async-awaitパターンGeneratePasswordAsyncが欲しいです。ValidatePasswordAsync彼らはそれぞれの完了したオプション/イベントをキャンセルします

Q:インターフェイスレベルでasync-awaitパターンを使用できますか?

パスワードのリセットには、さまざまなソフトウェア、プラットフォーム、オペレーティングシステムを対象としています。そのため、一般的なジェネレーターです。

次の質問は、さまざまな種類のパスワードをカバーしようとしているため、これら両方のメソッドの署名である可能性が高く、リターンタイプには何で十分かを理解する必要があります。シンプルObjectまたは<T>

4

1 に答える 1

1

非同期を使用して、インターフェイスレベルで待機できます。asyncおよびawaitキーワードは、既存の.Netインターフェイスを処理するための事前にパッケージ化されたコードを提供するC#キーワードであることを忘れないでください。.Net標準インターフェースを選択するか、独自のインターフェースを使用してください(おそらくすでに実装されているため)。

「オブジェクト」の使用は、デジタル証明書やワンタイムパスワード(OTP)などの他の形式の認証を処理するためにあると思います。ただし、この場合、認証対象は相手に署名するためにナンスを送信することを希望する場合があり、上記のパターンは複数ラウンドの通信をカバーしていません。

暗号化されていないチャネルを介して、パスワードをプレーンテキストで送信しないでください。それ以外の場合は、ネットワークから盗聴される可能性があります。また、何らかの形のリプレイ攻撃の検出と、ソース認証とクライアント認証の両方が必要になる場合があります。そうしないと、誰かが「ValidatePassword」への呼び出しをキャプチャし、リプレイして正常に認証するか、誤ったログオン試行が多すぎるとアカウントをロックアウトする可能性があります。

回答で質問するのは悪い形式ですが、ユーザー名やその他のIDはどのように指定されていますか?これは辞書の値の1つですか?

于 2012-09-02T14:18:41.893 に答える