Методи аутентифікації веб-api


26

Ми маємо структуру веб-сервісу asp.net MVC для обслуговування xml / json для людей. Отримуйте запити, але намагаємось знайти найкращий спосіб (швидкий, простий, тривіальний для користувачів, що кодують javascript або мови OO) для автентифікації користувачів. Справа не в тому, що наші дані є чутливими або що-небудь, ми просто хочемо, щоб користувачі зареєструвались, щоб ми могли мати їх електронну адресу, щоб повідомляти про зміни та відстежувати використання.

У нашій попередній спробі ми мали ім’я користувача в URI і просто переконалися, що ім'я користувача існувало та збільшували db таблиці з використанням. Це було дуже просто, але ми помітили, що користувачі демонструють демо як ім’я користувача тощо, тому нам потрібно, щоб він був трохи складнішим.

Які методи аутентифікації доступні? Що використовують / роблять основні гравці.


Що ви вважаєте "головним гравцем"? Перерахуйте кілька прикладів. Поки ви перебуваєте на цьому, додайте посилання на визначення API головного гравця, щоб ми могли побачити, що вони роблять.
С.Лотт

я вважав би щебет / facebook / google / мерехтіння основними гравцями. developers.facebook.com apiwiki.twitter.com
Стів

Відповіді:


10

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


я не впевнений, що мені подобається ваше рішення.
Стів

Стів: використовуйте рішення Flickr

чи є мерехтливе рішення з відкритим кодом чи мені просто потрібно прочитати їхні api та розібратися?
Стів

Прочитайте їх API, це дуже просто. Не настільки безпечний, як мій метод, якщо у вас немає SSL, але дуже хороший

Ваше рішення md5 просто не відповідає законопроекту "банальним для користувачів JavaScript". Мені доведеться ще раз перевірити Flickr API. Я поглянув на це, але мені потрібно вивчити частину термінології. В основному, що таке жаби.
Стів

3

Це відео - цікавий спосіб використання ключа API за допомогою сервісу WCF / REST. код .


це та сама ідея, що і ввести ім'я користувача в сервіс, за винятком того, що вони називають його ключем api. Хтось може переглядати джерело сторінки, якщо за допомогою javascript скопіювати ключ, та скористатись іншим місцем. Ви хочете, щоб ключ api був пов'язаний з викликовим доменом, щоб ключ api повинен бути дійсним, і він повинен надходити з xyz.com?
Стів

також це дублікат того, що запропонував @KinGBin?
Стів

0

Я вважаю, це ваша візуальна студія. Якщо ви використовуєте порівняно з 2010 з версією 4.0, ви можете ознайомитись із шаблоном "WCF REST Service With API Key Verification" у порівнянні з 2010 роком.


1
Мені доведеться розібратися в цьому. Я хотів би відійти від WCF хоча особисто.
Стів

Це було цікаво, але схоже, що він просто передає APIKey у рядку запиту. Чи це не означає, що ключ API видимий для всіх між абонентом і абонентом - навіть якщо ви використовуєте SSL?
JMarsch

0

Я завжди використовую аутентифікацію HTTP для веб-служб. Самою аутентифікацією буде оброблятися ваш веб-сервер, імовірно, IIS у вашому випадку. Потім ви налаштуєте IIS для аутентифікації на вашу базу даних, сховище LDAP тощо.

Потім ви отримаєте доступ до імені користувача через властивість User.Identity.Name

EDIT : Приклад аутентифікації 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;
}

як би ви це зробили з клієнтом javascript?
Стів

client = новий XMLHttpRequest (); client.open (метод, URL, асинхроніка, користувач, пароль);
ewindisch

додав приклад jquery, щоб відповісти
ewindisch

1
тому комбінація паролів із іменем користувача повинна містити звичайний текст у джерелі. не здається гарною ідеєю.
Стів

1
Ок, так що в основному вам потрібно буде ввести своє ім’я користувача / пароль на екран входу, щоб запустити api-запит? Це рішення жахливе. Кожен користувач на загальнодоступному веб-сайті повинен був бути зареєстрований?
Стів
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.