Сгенерируйте номер подтверждения клиента для веб-службы - PullRequest
1 голос
/ 07 апреля 2009

У меня есть веб-служба, обращенная наружу, однако мне нужно создать систему проверки, чтобы убедиться, что запрос поступил от действительного клиента.

Допустим, исходный веб-сервис определен следующим образом:

[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
}

У кого-нибудь есть предложения по поводу этой функции хеширования или модели в целом?

Он должен быть специфичным для сообщения, клиентским и трудно угадываемым (высокая энтропия).

Ответы [ 2 ]

1 голос
/ 14 апреля 2009

Почему бы не использовать один из стандартных методов аутентификации веб-сервисов? У вас будет выбор известных и широко реализованных решений, и вы не будете портить интерфейс, пытаясь передать как параметры, так и информацию для аутентификации.

У вас все еще может быть проблема с авторизацией, если аутентифицированный клиент может передать более одного «clientId», но, опять же, существует множество известных решений, и это полностью на вашей стороне. Например, вы можете зайти так далеко, как реализация ACL, в которой перечислены все допустимые комбинации (userId, clientId, methodname) и запрещены все остальные.

1 голос
/ 07 апреля 2009

Вы, вероятно, ищете какой-то MAC . Что-то вроде MD5 для хэша. Вся идея MD5 заключается в том, что вы применяете его к «некоторым» данным и получаете значение. Поскольку часть «некоторые данные» не всем известна, воспроизвести значение практически невозможно.

...