Teknik otentikasi api web

26

Kami memiliki kerangka kerja layanan web asp.net MVC untuk melayani xml / json untuk orang-orang. Dapatkan permintaan tetapi berjuang untuk mencari cara terbaik (cepat, mudah, sepele untuk pengguna yang mengode dengan javascript atau bahasa OO) untuk mengautentikasi pengguna. Bukan karena data kami sensitif atau apa pun, kami hanya ingin pengguna mendaftar sehingga kami dapat memiliki alamat email mereka untuk memberi tahu mereka tentang perubahan dan melacak penggunaan.

Dalam upaya kami sebelumnya, kami memiliki nama pengguna di URI dan hanya akan memastikan bahwa nama pengguna ada dan menambah tabel db dengan penggunaan. Ini sangat mendasar tetapi kami akan melihat orang menggunakan demo sebagai nama pengguna, dll. Jadi kami membutuhkannya agar sedikit lebih canggih.

Teknik otentikasi apa yang tersedia? Apa yang para pemain utama gunakan / lakukan.

Steve
sumber
Apa yang Anda anggap sebagai "pemain utama"? Harap sebutkan beberapa contoh. Saat Anda melakukannya, harap sertakan tautan ke definisi API "pemain utama" sehingga kami dapat melihat apa yang mereka lakukan.
S.Lott
saya akan mempertimbangkan twitter / facebook / google / flicker sebagai pemain utama. developers.facebook.com apiwiki.twitter.com
Steve

Jawaban:

10

Saya menanyakan pertanyaan itu di StackOverflow dan Anda bisa membacanya di sini . Lihat juga jawaban saya untuk pertanyaan saya sendiri. Yaitu tentang otentikasi tepatnya tanpa harus memasukkan kata sandi untuk setiap permintaan, dan tanpa SSL atau Enkripsi. Hanya hashing sederhana.

Komunitas
sumber
Saya tidak yakin saya suka solusi Anda.
Steve
Steve: gunakan solusi Flickr
apakah ada solusi flicker open source atau apakah saya hanya perlu membaca apinya dan mencari tahu?
Steve
Baca API mereka, sangat sederhana. Tidak
Solusi md5 Anda sepertinya tidak sesuai dengan tagihan dengan "sepele untuk pengguna javascript". Saya harus memeriksa API flickr lagi. Saya meliriknya tetapi perlu mempelajari beberapa terminologi. Terutama apa itu frob.
Steve
3

Video ini adalah cara menarik menggunakan kunci API dengan layanan WCF / REST Anda. kode .

Tangurena
sumber
ini adalah ide yang sama dengan menempatkan nama pengguna di layanan kecuali mereka menyebutnya kunci api. Seseorang dapat melihat sumber halaman jika javascript dan menyalin kunci dan menggunakannya di tempat lain. Apakah Anda ingin memiliki kunci api ditautkan ke domain panggilan sehingga kunci api perlu valid dan perlu berasal dari xyz.com?
Steve
apakah ini duplikat dari apa yang disarankan oleh @KinGBin?
Steve
0

Saya bawa Anda menggunakan studio visual. Jika Anda menggunakan vs 2010 dengan kerangka kerja 4.0, Anda bisa memeriksa templat "WCF REST Service With API Key Verification" di vs 2010.

KinGBin
sumber
1
Saya harus melihat itu. Saya ingin menjauh dari WCF secara pribadi.
Steve
Ini menarik, tetapi sepertinya hanya melewati APIKey dalam string kueri. Bukankah itu berarti bahwa kunci API dapat dilihat oleh siapa saja di antara penelepon dan callee - bahkan jika Anda menggunakan SSL?
JMarsch
0

Saya selalu menggunakan otentikasi HTTP untuk layanan web. Otentikasi itu sendiri akan ditangani oleh server web Anda, kemungkinan IIS dalam kasus Anda. Anda kemudian akan mengkonfigurasi IIS untuk mengotentikasi terhadap database Anda, toko LDAP, atau yang serupa.

Anda kemudian akan mengakses nama pengguna melalui properti User.Identity.Name

EDIT : Contoh otentikasi 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
sumber
bagaimana Anda melakukan ini dengan klien javascript?
Steve
client = new XMLHttpRequest (); client.open (metode, url, async, pengguna, kata sandi);
ewindisch
menambahkan contoh jquery untuk menjawab
ewindisch
1
jadi kombinasi kata sandi nama pengguna harus berada dalam teks biasa di sumbernya. sepertinya bukan ide yang bagus.
Steve
1
ok, jadi pada dasarnya Anda harus memasukkan nama pengguna / kata sandi Anda ke layar login untuk memadamkan permintaan api? Solusi itu mengerikan. Setiap pengguna ke situs web publik harus terdaftar?
Steve