Jawaban:
Mereka adalah dua protokol otentikasi yang berbeda dan mereka berbeda pada tingkat teknis.
Dari kejauhan, perbedaan dimulai ketika pengguna memulai otentikasi. Dengan OpenID, login pengguna biasanya merupakan alamat HTTP sumber daya yang bertanggung jawab untuk otentikasi. Di sisi lain, SAML didasarkan pada kepercayaan eksplisit antara situs Anda dan penyedia identitas sehingga agak jarang menerima kredensial dari situs yang tidak dikenal.
Identitas OpenID mudah ditemukan di internet. Sebagai pengembang, Anda dapat menerima pengguna yang berasal dari penyedia OpenID yang sangat berbeda. Di sisi lain, penyedia SAML biasanya harus diberi kode terlebih dahulu dan Anda menggabungkan aplikasi Anda dengan hanya penyedia identitas yang dipilih. Adalah mungkin untuk mempersempit daftar penyedia identitas OpenID yang diterima tetapi saya pikir ini akan bertentangan dengan konsep OpenID umum.
Dengan OpenID Anda menerima identitas yang berasal dari server yang arbitrer. Seseorang mengaku http://someopenid.provider.com/john.smith
. Bagaimana Anda akan mencocokkan ini dengan pengguna di basis data Anda? Entah bagaimana, misalnya dengan menyimpan informasi ini dengan akun baru dan mengenali ini ketika pengguna mengunjungi situs Anda lagi. Perhatikan bahwa informasi lain tentang pengguna (termasuk nama atau emailnya) tidak dapat dipercaya!
Di sisi lain, jika ada kepercayaan eksplisit antara aplikasi Anda dan Penyedia Id SAML, Anda bisa mendapatkan informasi lengkap tentang pengguna termasuk nama dan email dan informasi ini dapat dipercaya, hanya karena hubungan kepercayaan. Ini berarti bahwa Anda cenderung percaya bahwa Penyedia Id entah bagaimana memvalidasi semua informasi dan Anda dapat mempercayainya di tingkat aplikasi. Jika pengguna datang dengan token SAML yang dikeluarkan oleh penyedia yang tidak dikenal, aplikasi Anda hanya menolak otentikasi.
(bagian ditambahkan 07-2017, diperluas 08-2018)
Jawaban ini bertanggal 2011 dan pada saat itu OpenID adalah singkatan dari OpenID 2.0 . Kemudian, di suatu tempat di 2012, OAuth2.0 telah diterbitkan dan pada tahun 2014, OpenID Connect (garis waktu lebih rinci di sini ).
Bagi siapa pun yang membaca ini saat ini - OpenID Connect tidak sama dengan OpenID yang dijawab oleh jawaban asli , melainkan kumpulan ekstensi untuk OAuth2.0.
Sementara jawaban ini dapat titik terang dari sudut pandang konseptual, versi yang sangat singkat untuk seseorang yang datang dengan latar belakang OAuth2.0 adalah bahwa OpenID Connect adalah sebenarnya OAuth2.0 tetapi menambahkan cara standar query info pengguna , setelah token akses tersedia.
Mengacu pada pertanyaan awal - apa perbedaan utama antara OpenID Connect (OAuth2.0) dan SAML adalah bagaimana hubungan kepercayaan dibangun antara aplikasi dan penyedia identitas:
SAML membangun hubungan kepercayaan pada tanda tangan digital, token SAML yang dikeluarkan oleh penyedia identitas ditandatangani XML, aplikasi memvalidasi tanda tangan itu sendiri dan sertifikat yang dihadirkannya. Informasi pengguna termasuk dalam token SAML, di antara informasi lainnya.
OAuth2 membangun hubungan kepercayaan pada panggilan HTTP langsung dari aplikasi ke identitas. Permintaan berisi token akses (diperoleh oleh aplikasi selama aliran protokol) dan respons berisi informasi tentang pengguna.
OpenID Connect selanjutnya memperluas ini untuk memungkinkannya mendapatkan identitas tanpa langkah tambahan yang melibatkan panggilan dari aplikasi ke penyedia identitas. Idenya didasarkan pada fakta bahwa penyedia OpenID Connect sebenarnya mengeluarkan dua token, yang access_token
, yang sama persis dengan masalah OAuth2.0 dan yang baru, id_token
yang merupakan token JWT , ditandatangani oleh penyedia identitas. Aplikasi dapat menggunakan id_token
untuk membuat sesi lokal, berdasarkan klaim yang termasuk dalam token JWT tetapi id_token
tidak dapat digunakan untuk lebih lanjut meminta layanan lain, panggilan tersebut ke layanan pihak ketiga masih harus menggunakanaccess_token
. Anda dapat memikirkan OpenID Connect kemudian sebagai gabungan antara SAML2 (token yang ditandatangani) dan OAuth2 (token akses), karena OpenID Connect hanya melibatkan keduanya.
OpenID dan SAML2 keduanya didasarkan pada konsep identitas gabungan yang sama. Berikut adalah beberapa perbedaan di antara mereka ..
Mengesampingkan detail teknis, karena sangat terlambat untuk pesta, apa yang saya pahami bahwa perbedaan terbesar antara SAML dan standar auth lainnya (termasuk OpenID) adalah bahwa
SAML mensyaratkan Penyedia Identitas (IDP) dan Penyedia Layanan (SP), untuk saling mengenal sebelumnya, pra-konfigurasi , otentikasi dan otorisasi statis . OpenId (+ Connect) tidak memiliki persyaratan seperti itu.
Ini penting bagi pengungsi yang menginginkan kontrol penuh atas siapa yang mengakses data. Bagian dari standar adalah untuk mengkonfigurasi apa yang disediakan untuk SP tertentu.
Misalnya, bank mungkin tidak ingin penggunanya mengakses layanan apa pun kecuali beberapa yang telah ditentukan sebelumnya (karena peraturan atau aturan keamanan ketat lainnya).
Ini tidak berarti bahwa OpenId IDP, tidak dapat menerapkan pembatasan seperti itu. Seorang pelaksana OpenID dapat mengontrol akses, tetapi itu bukan tujuan dari OpenID.
Selain perbedaan kontrol akses yang telah ditentukan, ketat, statis, konseptual (tidak secara teknis), OpenID Connect dan SAML serupa.
Intinya, jika Anda seorang SP, Anda harus mendukung apa yang pelanggan Anda butuhkan:
SAML dan OpenID dapat bertindak sebagai penyedia identitas (disingkat IdP) yaitu protokol otentikasi terdesentralisasi (identitas akses tunggal).
The S ecurity A ssertion M arkup L anguage ( SAML ) adalah satu set profil untuk bertukar otentikasi dan otorisasi data di domain keamanan. Dalam model domain SAML, penyedia identitas adalah jenis otoritas autentikasi khusus. Secara khusus, penyedia identitas SAML adalah entitas sistem yang mengeluarkan pernyataan otentikasi bersama dengan profil SSO SAML. Pihak yang mengandalkan yang mengkonsumsi pernyataan otentikasi ini disebut penyedia layanan SAML. Sumber
O pena ID C onnect ( OIDC ) adalah lapisan otentikasi di atas OAuth 2.0, kerangka otorisasi. Standar ini dikendalikan oleh OpenID Foundation. OAuth untuk protokol otorisasi, bukan protokol otentikasi dan OpenID yang dirancang khusus sebagai protokol otentikasi. OIDC menggunakan JSON Web Tokens (JWT) sederhana, mereka lebih mudah dikonsumsi oleh JavaScript.
Gunakan OAuth jika pengguna Anda mungkin hanya ingin masuk dengan Facebook, atau Twitter. Gunakan OpenID jika pengguna Anda adalah orang yang menjalankan penyedia OpenID mereka sendiri karena mereka "tidak ingin orang lain memiliki identitas mereka".