de-vraag
  • Pertanyaan
  • Tag
  • Pengguna
Notifikasi
Imbalan
Registrasi
Setelah Anda mendaftar, Anda akan diberitahu tentang balasan dan komentar untuk pertanyaan Anda.
Gabung
Jika Anda sudah memiliki akun, masuk untuk memeriksa pemberitahuan baru.
Akan ada hadiah untuk pertanyaan, jawaban, dan komentar tambahan.
Lebih
Sumber
Sunting
 user2943799
user2943799
Question

Otentikasi untuk layanan web lainnya

I'm mulai merancang sebuah REST web service, dan saya tidak jelas pada pendekatan yang terbaik untuk otentikasi. Layanan ini akan memungkinkan pengguna individu untuk mengakses/mengelola data mereka sendiri, sehingga beberapa jenis otentikasi pengguna diperlukan. I've telah melihat opsi ini:

  • OAuth

OAuth tampaknya lebih tentang otorisasi, bukan dari otentikasi. Saya berencana untuk menangani otorisasi secara native dalam pelayanan, jadi saya tidak mencari solusi untuk ini. Tapi, ini OAuth juga sesuai untuk otentikasi?

  • OpenID

OpenID pasti memberikan solusi untuk otentikasi, tapi ini lebih ditujukan untuk memungkinkan pengguna untuk menggunakan pihak ke-3 kredensial (Google, Yahoo, dll.) Meskipun saya ingin dukungan ini, ini bukan merupakan perhatian utama bagi saya, dan saya pasti akan memungkinkan pengguna untuk mendaftar dengan asli kredensial (email/password).

  • HTTP otentikasi Dasar

Ini adalah sederhana untuk melaksanakan, tetapi's pemahaman saya bahwa ini mungkin tidak akan menjadi sangat aman metode. Juga, tampaknya memerlukan pertukaran kredensial untuk akses masing-masing, tapi saya'd sukai bahwa pengguna melakukan otentikasi sekali dan kemudian melanjutkan akses melalui sesi token.

  • Custom otentikasi

Pada dasarnya, roll saya sendiri login/token generasi layanan, dan memerlukan token yang valid untuk mengakses semua sumber daya lainnya (jelas, semuanya akan over SSL).


Serta menciptakan layanan web, saya'll juga akan membangun klien (web) aplikasi yang menggunakan layanan ini atas nama pengguna, tapi aku don't ingin aplikasi untuk menyimpan informasi pengguna/mandat/dll. Jadi, sesuatu seperti ini:

Pengguna (mengotentikasi dengan email/password atau pihak ke-3 kredensial) --> aplikasi Web (mengotentikasi dengan aplikasi ID) --> Web services

Dan lagi, aku ingin mengizinkan orang lain untuk membangun klien juga, jadi tingkat menengah dapat setiap aplikasi pihak ke-3:

Pengguna (mengotentikasi dengan email/password atau pihak ke-3 kredensial) --> aplikasi pihak ke-3 (mengotentikasi dengan aplikasi ID) --> Web services

Saya sangat top-level persyaratan:

  • Aman (jelas)
  • Asli surat mandat
  • Dukungan untuk 3rd party kredensial (Google, Yahoo, LinkedIn, dll.)
  • Dukungan beberapa klien (aplikasi web, aplikasi mobile, aplikasi pihak ke-3, dll.)
  • Klien kredensial (hanya sebuah aplikasi ID?)
  • Sesi Login yang berakhir
  • Otorisasi TIDAK diperlukan

Jadi, pertanyaan saya adalah, berdasarkan hal di atas (mohon beritahu saya jika ini terlalu samar-samar), apakah ada "terbaik" pendekatan? Yang OAuth atau OpenID yang tepat, atau saya membuat ini terlalu rumit, dan bukan hanya harus menggulung saya sendiri otentikasi?

EDIT:

Saya pikir saya akan perlu untuk mengimplementasikan berikut:

  1. Asli surat mandat/token (HTTP basic auth atas SSL?)

  2. Sebuah OpenID "Mengandalkan Pihak" untuk memungkinkan saya api untuk menggunakan OpenIDs host di tempat lain (yaitu, "dukungan untuk pihak ke-3 kredensial")

  3. OAuth "Konsumen" untuk memungkinkan saya api untuk mengakses layanan pihak ke-3 (seperti mengakses pengguna's profil LinkedIn).

  4. Sebuah OpenID "Penyedia" untuk memungkinkan orang untuk menggunakan api's asli Id di tempat lain (opsional)

  5. OAuth "Penyedia" untuk memungkinkan aplikasi pihak ke-3 untuk mengakses api pada pengguna' nama (opsional)

Apakah ini tampak benar, atau saya membuat ini lebih rumit dari itu perlu?

43 2013-11-01T05:38:35+00:00 8
 user2943799
user2943799
Pertanyaan edit 8 November 2013 в 12:13
Pemrograman
rest
oauth
web-services
openid
authentication
 nullptr
nullptr
8 September 2014 в 3:16
2014-09-08T15:16:26+00:00
Lebih
Sumber
Sunting
#22684888

Anda bisa mempertimbangkan JWT (JSON Web Token) lihat JWT rancangan rfc. Itu pasti akan memenuhi keamanan dan sesi tanggal kedaluwarsa persyaratan. Namun menjadi rancangan standar itu's tidak mungkin untuk digunakan secara luas sekarang ini bisa segera berubah sejak JWT adalah bagian dari OAuth 2.0. JWT yang mudah diterapkan dalam banyak bahasa dan terdapat beberapa perpustakaan yang sudah. Sebagai penjelasan sederhana, yang JWT token terdiri dari 3 bagian , yaitu header , body dan tanda tangan. Header dan tubuh adalah objek json yang basee64url dikodekan (huruf berbeda dari base64 oleh 2 karakter terakhir) dan kemudian menandatangani kontrak dengan HMAC256 (atau algoritma lain yang ditentukan dalam header) RFC menjelaskan bagaimana untuk benar-benar menghasilkan tanda tangan ini. Anda mungkin ingin memeriksa ini online token generator.

JWT adalah header http dan parameter kueri yang ramah.

12
0
Anu  Thomas Chandy
Anu Thomas Chandy
21 Februari 2014 в 2:01
2014-02-21T02:01:34+00:00
Lebih
Sumber
Sunting
#22684885

Salah satu pilihan yang baik untuk mempertimbangkan adalah 'Shared key Authentication'. Ini adalah jenis otentikasi bahwa Amazon web service dan Windows Azure Storage menggunakan layanan. Kami telah menggunakan Shared Key Authentication di SELURUH layanan yang kami kembangkan. Anda dapat melakukan pencarian cepat di Google untuk 'Shared Key authentication' anda akan mendapatkan banyak rincian.

Saya menulis satu posting blog di sini tentang hal ini.

Langkah tingkat tinggi adalah:

  1. Klien menggabungkan set data yang unik (unsur-unsur) didefinisikan oleh SELURUH layanan.
  2. Tanda ini dikombinasikan data menggunakan kunci hanya diketahui oleh klien dan SISANYA layanan
  3. Mengirim tanda tangan ini untuk BERISTIRAHAT layanan sebagai nilai Header HTTP
  4. SISANYA layanan komputasi tanda tangan yang sama persis dengan cara yang klien lakukan
  5. Membandingkan tanda tangan yang dikirim oleh client dengan satu dihitung, jika sama-sama mengasumsikan permintaan yang valid yang lain menolak permintaan
Buhake Sindi
Buhake Sindi
Jawaban edit 6 Juli 2015 в 9:49
11
0
 ArunasR
ArunasR
8 September 2014 в 10:16
2014-09-08T22:16:54+00:00
Lebih
Sumber
Sunting
#22684889

Saran saya adalah untuk mengotentikasi permintaan pertama dan kemudian mengatur sesi token.

Front-end aplikasi akan menyimpan token dan memberikan itu dengan setiap permintaan berikutnya.

Token akan memiliki waktu kadaluarsa. Token akan hangus jika tidak digunakan untuk periode waktu tertentu.

Token dapat dikaitkan dengan alamat IP asal untuk keamanan tambahan.

Token dapat ditularkan sebagai cookie, atau sebagai salah satu dari query parameter dalam URL.

Jika repot-repot SSL otentikasi klien dapat diterima, anda bisa menggunakan saling otentikasi SSL. Setiap klien harus ditetapkan dengan sertifikat yang percaya server. Hal ini dapat sama sertifikat, atau sertifikat yang berbeda jika anda harus memperlakukan klien yang berbeda.

7
0
Jos Vinke
Jos Vinke
1 November 2013 в 1:42
2013-11-01T13:42:49+00:00
Lebih
Sumber
Sunting
#22684884

Berdasarkan pada kebutuhan anda saya pikir OAuth 2.0 mungkin benar-benar menjadi pilihan yang menarik. OAuth adalah memang otorisasi protokol, tetapi juga Mengesahkan klien dengan clientId dan clientSecret. Anda dapat menggunakan Klien Credential Aliran dan memilih untuk tidak menyertakan Refresh Token, dengan cara ini pengguna memiliki Akses Token`, yang berakhir setelah jumlah waktu tertentu. Dan sejak OAuth adalah banyak digunakan protokol mereka sudah banyak client dan sisi server perpustakaan untuk anda dan klien anda untuk menggunakan.

Jika anda berpikir OAuth terlalu berat atau terlalu rumit untuk aplikasi anda saya mungkin akan tetap dengan Otentikasi Dasar atas HTTPS. Tapi karena saya juga dinyatakan dalam jawaban lain untuk pertanyaan serupa, saya tidak akan pernah menemukan saya sendiri mekanisme otentikasi.

Untuk info lebih lanjut anda juga dapat melihat jawaban lain saya've diberikan sebelumnya untuk pertanyaan serupa: https://stackoverflow.com/a/15003777/849741

 Community
Community
Jawaban edit 23 Mei 2017 в 12:02
2
0
 TheZuck
TheZuck
6 September 2014 в 7:20
2014-09-06T19:20:32+00:00
Lebih
Sumber
Sunting
#22684887

I've dilaksanakan dan dirilis sebagai open source layanan dasar yang memungkinkan otentikasi, dapat dengan mudah diubah untuk memungkinkan 3-tupel login jika diperlukan. Ini adalah sekitar 2 tahun dan ditulis di Jawa selama musim Semi sehingga anda mungkin ingin untuk mempertimbangkan kembali teknologi, tetapi bekerja dan anda bisa mendapatkan ide dasar tentang bagaimana it's dilakukan. Menemukan hal di sini di google, atau mengikuti my blog tentang hal itu. Perhatikan bahwa aplikasi tidak lagi beban di cloudbees tapi jika anda memasangnya di akun anda semua harus ok.

1
0
 Kai
Kai
18 Maret 2014 в 11:38
2014-03-18T23:38:19+00:00
Lebih
Sumber
Sunting
#22684886

Anda bisa menggunakan HTTP Basic Auth, di mana ditransfer password tidak benar-benar password tapi tanda, bahwa klien yang diperoleh pada sumber daya yang berbeda permintaan, di mana ia/dia/itu harus memberikan/nya/password sekali dan hanya sekali (bahkan mungkin lebih dari saluran yang berbeda). Ini tidak aman man-in-the-middle attacks (seperti yang ada's tidak pesan masuk), tetapi gagasan adalah bahwa anda selalu dapat meminta klien untuk menghasilkan dinamis token entah bagaimana (yaitu pada auth layanan anda sendiri) dan kemudian harus mengirim token sebagai pengganti password, sehingga password yang sebenarnya tidak terus-menerus ditransfer melalui kawat. Ya, hal ini tampaknya seperti salah satu "custom auth solusi", tapi itu benar-benar isn't karena anda bisa memaksakan apa yang pernah aturan yang anda inginkan pada token-password, seperti menggunakan tanda tangan tanda sebagai password itu adalah sesi yang terikat atau dihitung kembali pada setiap permintaan (tanpa berbagi rahasia) sehingga server dapat memvalidasi pesan - apa pun kebutuhan anda. idenya adalah untuk mengirim validasi token sebagai "password" HTTP Basic Auth permintaan dan tidak bergantung pada yang lebih rumit protokol, sementara tidak berkuasa mereka keluar (untuk pilihan anda).

1
0
 Ramil
Ramil
27 Juli 2017 в 8:30
2017-07-27T20:30:34+00:00
Lebih
Sumber
Sunting
#22684890

Saya sarankan menggunakan Semi Boot untuk layanan web Tenang karena anda dapat menggunakan mereka musim Semi Keamanan untuk menerapkan otentikasi kustom anda sendiri berdasarkan template. Anda dapat menerapkan anda sendiri kustom otentikasi dengan memperluas atau menerapkan basis mereka keamanan kelas dan interface masing-masing. Anda juga memiliki pilihan untuk menggabungkan orang-orang lain auth mekanisme anda've tercantum di musim Semi Boot jika diperlukan.

0
0
Amit P
Amit P
28 Agustus 2019 в 8:56
2019-08-28T08:56:40+00:00
Lebih
Sumber
Sunting
#22684891

OAuth 2.0 adalah cara untuk pergi jika anda hanya membutuhkan otorisasi.Anda bisa menggunakan OpenID Connect, yang menyediakan otentikasi dan mendukung OAuth2.0 untuk otorisasi. Untuk OepnID Connect, ada banyak produk-produk bersertifikat tersedia jika anda perlu untuk setup layanan sendiri, ada banyak layanan online yang tersedia juga.

0
0
Tambahkan pertanyaan
Kategori
Semua
Teknologi
Budaya / Rekreasi
Kehidupan / Seni
Ilmu Pengetahuan
Profesional
Bisnis
Pengguna
Semua
Baru
Populer
1
Галина Утяшова
Terdaftar 20 jam yang lalu
2
Asilbek Qadamboyev
Terdaftar 3 hari yang lalu
3
Akshit Mehta
Terdaftar 6 hari yang lalu
4
me you
Terdaftar 1 minggu yang lalu
5
Никита иванов
Terdaftar 1 minggu yang lalu
ID
JA
KO
RU
© de-vraag 2022
Sumber
stackoverflow.com
di bawah lisensi cc by-sa 3.0 dengan atribusi