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. 那应该有两个功能:GeneratePasswordValidatePassword。将GeneratePassword根据实现程序集定义的算法生成密码。这ValidatePassword是我们需要的要求,因为不同的客户端具有不同的密码复杂性要求。生成密码后,必须对其进行验证。

现在,最近,我们切换到了 .NET Framework 4.5 和 Visual Studio 2012。这两种方法都可能很耗时。GeneratePassword可以生成一个简单的 AlphaNumeric 密码或密码的多页矩阵。同样,ValidatePassword可能会通过 HTTP 将生成的密码发送到客户端密码验证服务器/API。目前我们正在使用 BeginInvoke/EndInvoke 模式。我想拥有GeneratePasswordAsync异步ValidatePasswordAsync等待模式。他们将带着各自完成和取消的选项/事件

问:我可以在接口级别使用 async-await 模式吗?

我们针对不同的软件、平台和操作系统进行密码重置。所以这就是通用生成器的原因。

我的下一个问题很可能是这两种方法的签名,因为我试图涵盖广泛的密码类型,并且需要了解返回类型应该满足什么;一个简单Object的或一个<T>

4

1 回答 1

1

您可以在接口级别使用 async 和 await。请记住,async 和 await 关键字是提供预打包代码来处理现有 .Net 接口的 C# 关键字。要么选择 .Net 标准接口,要么使用你自己的(因为你可能已经实现了它们)。

我假设使用“对象”来处理其他形式的身份验证,例如数字证书或一次性密码 (OTP)。但是,在这种情况下,身份验证主体可能希望发送一个 nonce 供对方签名,而您上面的模式并不涵盖多轮通信。

切记永远不要通过未加密的通道以纯文本形式传输密码。否则,它们可能会被从网络中嗅出。您可能还需要某种形式的重放攻击检测以及源和客户端身份验证,否则,有人可能会捕获对“ValidatePassword”的调用,然后重播以成功验证身份或在多次错误登录尝试后锁定帐户。

我知道在答案中提出问题是不好的形式,但是如何指定用户名或其他身份?这是字典中的值之一吗?

于 2012-09-02T14:18:41.893 回答