我有一个面向外部的 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
}
有人对这个散列函数或整个模型有什么建议吗?
它需要特定于消息、特定于客户端且难以猜测(高熵)。