Методы аутентификации веб-API

26

У нас есть платформа веб-службы MVC asp.net для предоставления xml / json людям. Получайте запросы, но изо всех сил пытаемся найти лучший способ (быстрый, простой, тривиальный для пользователей, кодирующих на языках javascript или OO) для аутентификации пользователей. Дело не в том, что наши данные конфиденциальны или что-то в этом роде, мы просто хотим, чтобы пользователи регистрировались, чтобы у нас был адрес электронной почты, чтобы уведомлять их об изменениях и отслеживать использование.

В нашей предыдущей попытке у нас было имя пользователя в URI, и мы просто следили за тем, чтобы имя пользователя существовало, и увеличивали таблицы БД по мере использования. Это было очень просто, но мы бы заметили, что люди используют демо в качестве имени пользователя и т. Д., Поэтому нам нужно, чтобы оно было немного более сложным.

Какие методы аутентификации доступны? Что используют / делают основные игроки?

Стив
источник
Что вы считаете "крупным игроком"? Пожалуйста, перечислите несколько примеров. Пока вы в этом, пожалуйста, включите ссылку на определения API "крупного игрока", чтобы мы могли увидеть, что они делают.
S.Lott
Я хотел бы рассмотреть Twitter / Facebook / Google / мерцание основных игроков. developers.facebook.com apiwiki.twitter.com
Стив

Ответы:

10

Я задал этот вопрос на StackOverflow, и вы можете прочитать его здесь . Также см. Мой ответ на мой собственный вопрос. Что касается аутентификации точно, без необходимости передавать пароль для каждого запроса, а также без SSL или шифрования. Просто простое хеширование.

Сообщество
источник
Я не уверен, что мне нравится ваше решение.
Стив
Стив: используйте решение Flickr
Есть ли решение мерцания с открытым исходным кодом или мне просто нужно прочитать их API и выяснить это?
Стив
Прочитайте их API, это очень просто. Не так безопасно, как мой метод, если у вас нет SSL, но очень хорошо
Похоже, что ваше решение md5 не отвечает требованиям "тривиальных для пользователей javascript". Мне придется проверить API Flickr еще. Я посмотрел на это, но нужно изучить некоторые термины. Главным образом, что лягушки.
Стив
3

Это видео представляет собой интересный способ использования ключа API с вашей службой WCF / REST. код .

Tangurena
источник
это та же идея, что и ввод имени пользователя в сервис, за исключением того, что они называют его ключом API. Кто-то может посмотреть на источник страницы, если JavaScript и скопировать ключ и использовать его где-нибудь еще. Хотели бы вы, чтобы ключ API был связан с вызывающим доменом, чтобы ключ API был действительным и исходил от xyz.com?
Стив
Также это дубликат того, что предложил @KinGBin?
Стив
0

Я так понимаю, вы используете визуальную студию. Если вы используете версию 2010 с платформой 4.0, вы можете проверить шаблон «Служба REST WCF с проверкой ключа API» в версии 2010.

KinGBin
источник
1
Я должен буду изучить это. Я хотел бы уйти от WCF, хотя лично.
Стив
Это было интересно, но похоже, что он просто передает APIKey в строке запроса. Не означает ли это, что ключ API виден кому-либо между вызывающим абонентом и вызываемым абонентом - даже если вы используете SSL?
JMarsch
0

Я всегда использую HTTP-аутентификацию для веб-сервисов. Сама аутентификация будет обрабатываться вашим веб-сервером, вероятно, IIS в вашем случае. Затем вы должны настроить IIS для аутентификации в вашей базе данных, хранилище LDAP или подобном.

Затем вы получите доступ к имени пользователя через свойство User.Identity.Name.

РЕДАКТИРОВАТЬ : Пример аутентификации JQuery:

/* I found that providing the username and password both in the
   the arguments and in the url parameter seems to have better compatibility,
   if it works well for you, it is highly advisable to remove the 
   user/pass from the url */

function doLogin (){
  $.ajax({
    username: $('#username').val(),
    password: $('#password').val(),
    url: 'https://'+$('#username').val()+':'+$('#password').val()+'@api.example.com',
    dataType: 'jsonp',
    context: $('#result'),
    success: function(d) { $(this).html(d); $(location).attr('href','https://api.example.com/success'); }
    });
    return false;
}
ewindisch
источник
Как бы вы сделали это с клиентом JavaScript?
Стив
client = new XMLHttpRequest (); client.open (метод, URL, асинхронный, пользователь, пароль);
ewindisch
добавлен пример jquery для ответа
ewindisch
1
поэтому комбинация имени пользователя и пароля должна находиться в текстовом виде в источнике. не кажется хорошей идеей
Стив
1
Хорошо, так что в основном вам нужно будет ввести свое имя пользователя / пароль на экране входа в систему, чтобы запустить запрос API? Это решение ужасно. Каждый пользователь публичного сайта должен был быть зарегистрирован?
Стив