Я следил за несколькими статьями о веб-сервисах RESTful с WCF и, в частности, о том, как в них проходить аутентификацию. Основная статья, на которую я ссылался, — это веб-службы RESTful с WCF 3.5. Другой документ, посвященный аутентификации HMAC, — Статья Итая Гольдстина, основанная на статье Сконнарда.
Меня смущает «Ключ пользователя», на который ссылаются в обеих статьях. У меня есть клиентское приложение, которое потребует от пользователя наличия имени пользователя и пароля.
- Означает ли это, что ключ, который я использую для инициализации класса System.Security.Cryptography.HMACMD5, является просто паролем пользователя?
Учитывая метод, использованный для создания Mac в статье Итаи (показан ниже), я прав, думая, что
key
— это пароль пользователя, аtext
— это строка, которую мы используем, чтобы подтвердить, что детали на самом деле верны?public static string EncodeText(byte[] key, string text, Encoding encoding) { HMACMD5 hmacMD5 = new HMACMD5(key); byte[] textBytes = encoding.GetBytes(text); byte[] encodedTextBytes = hmacMD5.ComputeHash(textBytes); string encodedText = Convert.ToBase64String(encodedTextBytes); return encodedText; }
В моем примере параметр text
будет комбинацией uri запроса, общего секрета и метки времени (которая будет доступна в виде заголовка запроса и будет использоваться для предотвращения повторных атак).
Подходит ли эта форма аутентификации? Я столкнулся с другим потоком, который предполагает, что метод, определенный в приведенных выше статьях это «... (так в оригинале) уродливый взлом». Автор не объясняет, почему, но это обескураживает, учитывая, что я провел несколько часов, читая об этом и заставляя его работать. Однако стоит отметить, что принятый ответ на этот вопрос говорит о пользовательской схеме авторизации HMAC, поэтому, возможно, уродливая ссылка на взлом — это просто ее реализация, а не использование самих алгоритмов HMAC.
Диаграмма ниже взята из статьи Википедии о коде аутентификации сообщений. Я чувствую, что это должен быть безопасный способ, но я просто хочу убедиться, что правильно понимаю его использование, а также убедиться, что это не просто какой-то устаревший механизм, который был превзойден чем-то намного лучшим.