Доступ к веб-сервису (в python) с использованием Javascript и проблемы с хэшированием MD5
Пожалуйста, проверьте следующее исследование:
Существует клиент веб-API Python, который сообщает нам, что нам предоставляется testapi.py, который отправляет запрос на веб-сервис, запущенный tomcat 7. Теперь: -
Запрос имеет два параметра в теле JSON: - имя пользователя: тестовый пароль: тест
В запросе должны быть переданы три заголовка: - Дата: Какая дата в формате RFC 2822, например, Четверг, 21 декабря 2000 16:01:07 +0200 Тип содержимого: application/json;charset=utf-8 Content-MD5: Для Этот атрибут, веб-клиент Python, выполняет следующие действия: - Генерирует тело JSON массива параметров. Затем генерирует хеш MD5 тела JSON. Затем генерирует base64 строки MD5ed.
Ниже приведен код Python для генерации значения для Content-MD5:
h=hashlib.new('md5')
h.update(body)
headers['Content-MD5']=base64.b64encode(h.digest())
Постановка задачи: по какой-то причине мы должны сделать веб-клиент на javaScript. Мы получаем две проблемы:
- CORS
- Проблема с шифрованием
Случай 1 (CORS): по умолчанию Tomcat7 не поддерживает CORS, и поэтому мы обновили tomcat's catalina.jar до версии 7.0.42, в которой есть поддержка CORS и перезапущенный сервер tomcat7. Мы также добавили фильтры в web.xml. Теперь запрос достигает веб-сервера, и журнал событий показывает ошибку 400, но в консоли Network Error, как: -
"NetworkError: 400 Bad Request - https://xxx.xxx.xx.xxx/api/v1/sessions"
sessions
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://xxx.xxx.xx.xxx/api/v1/sessions. (Reason: CORS header 'Access-Control-Allow-Origin' missing).
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://xxx.xxx.xx.xxx/api/v1/sessions. (Reason: CORS request failed).
Здесь следует упомянуть, что tomcat7, Web-сервис и javascript находятся на одной машине.
Случай 2 (проблема шифрования): кажется, что MD5-хэш тела JSON в Python отличается от MD5-хэша javaScript. Я использую crypto-js, который является Google-кодом для генерации MD5. Пожалуйста, обратитесь это.
Пожалуйста, помогите прорваться. Я застрял здесь.