SAML ve OAuth ile birleşik giriş karşılaştırması


100

SAML ile OAuth ile federe giriş arasındaki fark nedir? Bir şirket üçüncü taraf bir web uygulamasını kullanmak ve aynı zamanda tek oturum açma ve kimlik doğrulama yetkilisi olmak istiyorsa hangi çözüm daha mantıklıdır?

Yanıtlar:


128

Farklı sorunları çözerler.

SAML , bir kullanıcının kim olduğu, özniteliklerinin neler olduğu hakkında bilgi paylaşmak ve size bir şeye erişim izni verme / reddetme ve hatta kimlik doğrulama talebinde bulunma yolu sunan bir dizi standarttır.

OAuth daha çok bir şeye erişim yetkisi vermekle ilgilidir . Temelde birisinin sizin gibi "hareket etmesine" izin veriyorsunuz. En yaygın olarak sizin adınıza bir şeyler yapabilen erişim API'leri vermek için kullanılır.

Tamamen farklı iki şeydir.


Yardımcı olabilecek bazı örnekler.

OAuth bir twitter düşün. Diyelim ki Google Buzz ve Twitter kullanıyorsunuz ve ikisini senkronize tutabilmek için bir uygulama yazmak istiyorsunuz. Temel olarak uygulamanız ve twitter arasında güven oluşturabilirsiniz. Uygulamayı twitter'a bağlamaya ilk kez gittiğinizde, Twitter'da oturum açmak için klasik komut istemini yaparsınız ve ardından bu onay kutusu açılır ve "Uygulamanızın adına erişim izni vermek ister misiniz?" Diye sorar. "evet" i tıkladığınızda, güven sağlanmıştır ve artık uygulamanız Twitter'da sizin gibi davranabilir. Gönderilerinizi okuyabilir ve yenilerini yapabilir.

SAML - SAML için, iki alakasız üyelik sistemi arasında bir tür "anlaşma" düşünün. Bizim durumumuzda US Airways ve Hertz kullanabiliriz. Sizi bir siteden diğerine götürebilecek paylaşılan bir kimlik bilgisi seti yoktur, ancak Hertz'in US Airways'e bir "anlaşma" teklif etmek istediğini söyleyelim. (Bunun aşırı bir örnek olduğunu bildiğimi kabul ediyorum, ancak bana katlanın). Bir uçuş satın aldıktan sonra, Başkan üyelerine ücretsiz bir kiralık araba sunacaklar. US Airways ve Hertz, bir çeşit güven ve kullanıcıyı tanımlamanın bir yolunu kuracaktı. Bizim durumumuzda "federe kimliğimiz" e-posta adresi olacaktır ve bu, Hertz'in US Airways kimlik sağlayıcısının doğru ve güvenli bir şekilde bir belirteç teslim edeceğine güvendiği tek yol güveni olacaktır. Uçuş rezervasyonunu yaptıktan sonra US Airways kimlik sağlayıcısı, bir token oluşturacak ve kullanıcıyı nasıl doğruladıklarını ve ayrıca bizim durumumuzda kişi hakkındaki "öznitelikleri" dolduracaktır. Jeton doldurulduktan sonra, onu bir tür referans yoluyla iletir veya bir url'de kodlanır ve Hertz'e ulaştığımızda, jetona bakar, onu doğrular ve şimdi ücretsiz kiralık arabaya izin verebilir.

Bu SAML örneğindeki sorun, birçok kullanımdan yalnızca birinin özel kullanım durumudur. SAML bir standarttır ve onu uygulayabileceğiniz neredeyse pek çok yol vardır.


Alternatif olarak, yetkilendirmeyi önemsemiyorsanız, SAML ve OpenID aracılığıyla kimlik doğrulamayı neredeyse iddia edebilirsiniz .


4
Hâlâ farkı anlamıyorum. "erişim ver / reddet" ve "API'lere erişim izni ver" sesi benim için aynı şey gibi geliyor. Farklılıkları görebilmem için daha benzer 2 örnek verebilir misiniz? Örneğin, uygulamanız ile Twitter arasında güven oluşturmak için neden SAML'yi kullanamadık? Ya da USAirways'e özel fırsattan bahsetmek için Hertz için OAuth'u neden kullanamadınız?
Tim Cooper

3
Anlıyorum, ancak her zaman OAuth ile SSO yapabilirim (kimlik sağlayan bir API'ye erişim talep ederek). Bu, OAuth'un SAML'nin yapabileceği her şeyi ve daha fazlasını yapabileceği anlamına mı geliyor?
Dirk

@Dirk neredeyse haklısınız, yani OAuth kullanarak kullanıcının kimliğini alabiliriz ve birçok uygulama gibi, kullanıcının kimliğini ve uygulamalarına girmelerine izin vermek için Google, Facebook, GitHub üzerinden giriş ister. Ancak OAuth kullanarak kimlik elde etmekten daha fazlasını başarabileceğimiz doğrudur.
chirag soni

40

Burada özetlenen bu basit açıklamaya bir göz atın :

SAML, OpenID ve OAuth arasındaki farklar pek çok insanın kafası karışık, ama aslında çok basit. Bir miktar örtüşme olsa da, burada üçünü birbirinden ayırmanın çok basit bir yolu var.

OpenID - tüketiciler için tek oturum açma

SAML - kurumsal kullanıcılar için tek oturum açma

OAuth - Uygulamalar arasında API yetkilendirmesi

OO tasarım modellerinde rahat olan kişiler için, sarmalayıcı modellerinin güzel bir sonucu olduğunu düşünüyorum . Cephe , Dekoratör ve Proxy modellerini düşünün . Temelde bu ... onlar sadece sarmalayıcılarını konum hepsi aynı farktır niyeti her desen .

Benzer şekilde, SAML, OAuth ve OpenID'nin tümü , bazı özel etkileşim için bir hizmet sağlayıcıya / kimlik otoritesine yeniden yönlendirme ve ardından kaynak üçüncü taraf uygulamasına yeniden yönlendirme olan ortak bir temel mekanizma aracılığıyla farklı niyetleri kolaylaştırır .

Ağda etrafa bakınca, protokollerin yetenekleri arasında örtüşme olduğunu göreceksiniz. OAuth aracılığıyla kimlik doğrulama son derece makul. OAuth üzerinden SSO çok anlamlı olmayabilir, ancak SAML ve OpenID özellikle federe kimliğe yöneliktir.

Sorunun kendisine, kurumsal bağlamda SAML, SSO için OAuth'tan daha uygun görünmektedir . Kurumsal kimliklerinizle entegre etmek istediğiniz üçüncü taraf uygulamalarına bakarsanız bahse girerim, bunların SAML / LDAP / Radius vb. İle entegre olacak şekilde tasarlandığını göreceksiniz. IMO OAuth İnternet etkileşimi için daha uygundur. uygulamalar arasında veya belki de büyük bir şirket ortamında bir Servis Odaklı Mimari içeren uygulamalar arasında.

Yetki kuralları başka şekillerde de kurumsal bir ortamda belirtilebilir. LDAP bunun için yaygın bir araçtır. Kullanıcıları gruplar halinde organize etmek ve uygulama ayrıcalıklarını grup üyeliğine göre ilişkilendirmek yaygın bir yaklaşımdır. Aynen böyle olur LDAP, kimlik doğrulama için de kullanılabilir. Active Directory harika bir örnek, ancak OpenLDAP'yi tercih etmeme rağmen.


1
@Sundeep
quickshift

Bağlantı güncellendi, ancak zaten cevapta bulunan özet aynı.
quickshiftin

OpenID yalnızca oAuth üzerinde oluşturulmuştur. oAuth, kullanıcı arayüzünü kendi başına desteklemez. OpenId bunu bizim için yapar. OAuth ile OpenID arasında başka bir fark yok
Bu bir tuzak

@ It'satrap doğru değil; Kimlik doğrulamayla ilgili OpenID, OAuth yetkilendirmeyle ilgilidir, ancak benzer (tarayıcı yeniden yönlendirme) bir mekanizmayı paylaşırlar. Kullanıcı arayüzüyle pek ilgisi yok ... Bu yanıta da bakın . Ayrıca buraya da bakabilirsiniz . Daha fazla açıklama için haha ​​cevabımı tekrar okuyabilirsiniz.
quickshift

1
@ It'satrap OpenId Spec " OAuth 2.0 üzerine inşa edilmiş kimlik doğrulaması " na bakmak isteyebilirsiniz ; ve ayrıca OAuth 2.0 Spesifikasyonu "OAuth 2.0 yetkilendirme çerçevesi" ... Yine biri kimlik doğrulama , diğeri yetkilendirme için tasarlanmıştır . Birincisi için sonradan yararlanmak sorun değil çünkü ortak bir temel paradigmayı paylaşıyorlar (3. veya 4. kez lol söyledim). Hepsi değişmemiş cevabımda özetlendi. Nasıl okunacağını öğrenmelisin kardeşim.
hızlı değiştirme

3

İnce bir kullanım durumunu ele alıyorlar

  • SAML - Bir kullanıcının kimlik bilgilerini (ör. SSO) çeşitli hizmet sağlayıcılarla (ör. Web veya web hizmeti) paylaşma
  • OAuth - Bir Uygulamayı kendi adına bir kaynağa erişmesi için yetkilendiren bir Kullanıcı

kısa ve basit bir şekilde özetlenmiştir.
Dexter

3

Burada iyi makale bulundu

görüntü açıklamasını buraya girin

SAML (Güvenlik Onayı Biçimlendirme Dili), Tek Oturum Açma (SSO), Federasyon ve Kimlik Yönetimi sağlamak için bir dizi standarttır.

Örnek : Bir kullanıcı (asıl), servis rezervasyon web sitesi Shuttler (servis sağlayıcı) ile SAML üzerinden SSO yapılandırılmış bir uçuş rezervasyon web sitesi, AirFlyer (kimlik sağlayıcı) ile kimlik doğrulaması yapar. Flyer'da kimlik doğrulaması yapıldığında, kullanıcı kimlik doğrulama gerektirmeden Shuttler'da servis rezervasyonu yapabilir

OAuth (Açık Yetkilendirme), kaynakların yetkilendirilmesi için bir standarttır. Kimlik doğrulama ile ilgilenmez.

Örnek : Kullanıcıların Instagram hesaplarından (OAuth sağlayıcı) fotoğrafları içe aktarmalarına olanak tanıyan ve fotoğraf paylaşım uygulamasına birkaç saat sonra sona eren geçici bir erişim jetonu veya anahtarı gönderen bir fotoğraf paylaşım mobil uygulaması (OAuth tüketicisi).


2

SAML, diğer kullanıcıların sitenize "giriş yapmasına" olanak tanıyan çeşitli "profillere" sahiptir. SAML-P veya SAML Passive çok yaygındır ve kurulumu oldukça basittir. WS-Trust benzerdir ve web siteleri arasında federasyona da izin verir.

OAuth, yetkilendirme için tasarlanmıştır. Daha fazlasını buradan okuyabilirsiniz:

OpenID ve OAuth arasındaki fark nedir?


"Giriş" ve "yetkilendirme" arasındaki farkı anlamakta zorlanıyorum. Farkı açıklayan bir örnek verebilir misiniz?
Tim Cooper

@TimCooper "login" kimlik doğrulama için gevşek bir terminolojidir , "authorize" ise iyi yetkilendirmedir ... İsteğinize bir örnek
quickshift içinde

1
@quickshiftin Tamam, bu ayrımı anlıyorum. Yanıtınız, SAML'nin kimlik doğrulaması yaparken OAuth'un yetkilendirme yaptığı anlamına geliyor. Bu doğru mu? Ya da ikisini birden mi yapıyorlar - (bu durumda hala farkın ne olduğunu bilmiyorum).
Tim Cooper

1
@TimCooper Protokollerin örtüşen bazı yetenekleri vardır. OAuth, yetkilendirmeyi hedefler, ancak kimlik doğrulamayı da destekler . Kurumsal bağlamda SSO, SAML'nin amacı için oluşturulmuş bir şeydir. Kapak tarafında, SAML de yetkilendirmeyi destekler. Bağlam Kullanılacak teknoloji karar verirken en önemli faktördür. Geçen yıl, bir Kerberos arka uçta kullanıcıların kimliğini doğrulamak için SimpleSAMLPhp kullanan, ardından bir LDAP sisteminden yetkilendirme kurallarını arayan Expression Engine için bir uzantı yazdım. Dışarıda çılgın bir dünya var!
quickshiftin


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.