У меня есть веб-служба, обращенная наружу, однако мне нужно создать систему проверки, чтобы убедиться, что запрос поступил от действительного клиента.
Допустим, исходный веб-сервис определен следующим образом:
[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
}
У кого-нибудь есть предложения по поводу этой функции хеширования или модели в целом?
Он должен быть специфичным для сообщения, клиентским и трудно угадываемым (высокая энтропия).