Должен ли я использовать OAuth для передачи данных между серверами, от JavaScript до C #? - PullRequest
2 голосов
/ 04 августа 2011

У меня есть требование передавать данные из JavaScript, работающего в закрытой / защищенной среде (т.е. не публичной), на страницу ASP.NET на общедоступном веб-сайте. Метод, который я сейчас пробую, выглядит примерно так:

Javascript (вкл. Sha256.js):

var key = "myVeryLongAndUnguessableKey&#^@23981238#&#&!*";
var nonce = "<randomly generated value>";
var expiry = new Date().getTime();
var data_to_pass = "name1=value1&name2=value2&name3=value3";

var concatStr = key + nonce + expiry + data_to_pass;
var hashed = sha256_digest(concatStr);

var requestURL = "http://myPublicServer/myscript.aspx?" + data_to_pass + 
                 "&nonce=" + nonce + "&expiry=" + expiry + "&checksum=" + hashed;

//do redirect to requestURL

На стороне C # я затем беру параметры строки запроса, разделяю одноразовый номер, срок действия и контрольную сумму, добавляю локальное значение ключа, перефразирую его и проверяю совпадение контрольной суммы и нового хэша. Если он совпадает, то я могу взять и использовать пары имя / значение «data_to_pass».

Это работает и выглядит довольно безопасно.

Мой босс просит, чтобы я проверил OAuth и, возможно, использовал его вместо этого, но я не могу понять, подходит ли OAuth для того, что я хочу сделать.

OAuth.net определяет OAuth как:

OAuth предоставляет пользователям способ предоставлять сторонним пользователям доступ к своим ресурсам без совместного использования их паролей. Он также предоставляет способ предоставления ограниченного доступа (по объему, продолжительности и т. Д.).

Я не собираюсь предоставлять доступ кому-либо или чему-либо, а скорее передавать данные относительно безопасным способом (настолько безопасным, насколько может быть JavaScript).

Я что-то упускаю из OAuth? Может ли это быть использовано для того, что я хочу сделать, и если да, то какие-нибудь статьи или примеры, которые могут помочь мне обернуть это вокруг?

Как всегда, большое спасибо - Это сообщество качается!

Кевин

Ответы [ 2 ]

2 голосов
/ 04 августа 2011

Похоже, что вы отправляете этот запрос по небезопасному каналу и просто хотите получить некоторую проверку целостности, чтобы убедиться, что только вы можете отправлять эти запросы в публичную конечную точку.OAuth может быть очень полезным здесь.

У вас есть два варианта:

  1. Используйте OAuth 1.0, как определено в RFC 5849 раздел 3 и просто используйтепустой токен доступа и секретный токен доступа.Идентификатор клиента может быть любым, а секретом клиента является ваш ключ выше.

  2. Используйте схему аутентификации HTTP MAC, которая является сопутствующим протоколом OAuth 2.0 черновик .Протокол MAC лучше и намного проще, но требует использования конечной точки авторизации HTTP и не поддерживает использование параметров запроса, как в OAuth 1.0.

Вариант 2 довольно прост (взгляните наnode.js модуль MAC ) для реализации.OAuth 1.0 не поддерживает SHA-256, но вы можете либо адаптировать его, либо использовать только базовую строку подписи.

Суть в том, что если у вас закрытая система, все это не имеет большого значения.Выберите то, что проще.Но если вы ожидаете, что сторонние разработчики будут работать с этим, тогда лучше использовать стандарт.

Что касается приведенного выше кода, вы должны использовать HMAC-SHA256, а не просто хеш-функцию, и если вы собираетесьчтобы разрешить использование одного и того же ключа более чем для одной конечной точки, необходимо связать запрос с абсолютным URI, чтобы предотвратить использование данных из одного запроса в другом.Кроме того, поскольку вы не указали временную метку, проверка одноразовых номеров со временем станет проблемой для постоянно растущего списка.

2 голосов
/ 04 августа 2011

OAuth - это протокол аутентификации (предоставляющий доступ к ресурсам), а не протокол транспортного шифрования.

Если вы хотите сделать транспорт безопасным, рассмотрите возможность использования SSL, если у вас есть контроль над (общедоступной) реализацией сервера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...