C# 为web服务生成特定于客户端的验证号

C# 为web服务生成特定于客户端的验证号,c#,security,encryption,hash,checksum,C#,Security,Encryption,Hash,Checksum,我有一个面向外部的web服务,但是我需要生成一个验证系统,以确保请求来自有效的客户端 假设原始web服务的定义如下: [OperationContract] public void Service.RequestMethod (string clientId, int reqNumber, string reqText) { // do stuff with the parameters } 我想确保请求实际上来自clientId参数指定的客户端 我目前的计划是在方法签名中添加

我有一个面向外部的web服务,但是我需要生成一个验证系统,以确保请求来自有效的客户端

假设原始web服务的定义如下:

[OperationContract]
public void Service.RequestMethod (string clientId, int reqNumber,
    string reqText)
{
    // do stuff with the parameters
}
我想确保请求实际上来自
clientId
参数指定的客户端

我目前的计划是在方法签名中添加另一个参数,给出排序校验和

[OperationContract]
public void Service.RequestMethod (string clientId, int reqNumber,
    string reqText, string reqChecksum)
{
    // verify reqChecksum, then
    // do stuff with the parameters
}
我需要一个函数来验证校验和是由批准的客户端计算的。它应该根据
reqNumber
reqText
参数以及客户端和服务器都知道的客户端特定“密码”进行计算

实际上,它应该是:

private bool VerifyChecksum(int reqNumber, string reqText,
    string clientPassword, string reqChecksum)
{
    // hash reqNumber, reqTxt, and clientPassword
    // ensure it matches reqChecksum
}
有人对这个散列函数或整个模型有什么建议吗


它需要特定于消息、特定于客户端,并且难以猜测(高熵)。

您可能正在寻找某种类型的信息。类似于散列的MD5。MD5的全部思想是将其应用于“某些”数据并获得一个值。只要“某些数据”部分不是每个人都知道的,就几乎不可能重现该值。

为什么不使用一种标准的web服务身份验证方法?您可以选择知名且广泛实施的解决方案,并且不会因为试图传递参数和身份验证信息而弄乱界面


如果一个经过身份验证的客户端可以传递多个“clientId”,那么您可能仍然会遇到授权问题,但同样有很多已知的解决方案,这完全取决于您。例如,您可以尽可能使用ACL实现,它列出所有可接受的(userId、clientId、methodname)组合,并禁止其他任何内容。

我怀疑它可能被称为特定的内容。谢谢。这是一个很好的建议,但是使用现有的身份验证方法可能会很困难。有可能从不同的位置以多种方式(SOAP、REST、远程处理)调用方法。自由访问,只要你知道“密码”是目标。。。