Antworten:
Es handelt sich um zwei verschiedene Authentifizierungsprotokolle, die sich auf technischer Ebene unterscheiden.
Aus der Ferne beginnen Unterschiede, wenn Benutzer die Authentifizierung initiieren. Bei OpenID ist eine Benutzeranmeldung normalerweise eine HTTP-Adresse der Ressource, die für die Authentifizierung verantwortlich ist. Auf der anderen Seite basiert SAML auf einer expliziten Vertrauensstellung zwischen Ihrer Site und dem Identitätsanbieter, sodass es eher ungewöhnlich ist, Anmeldeinformationen von einer unbekannten Site zu akzeptieren.
OpenID-Identitäten sind im Internet leicht zu umgehen. Als Entwickler können Sie dann einfach Benutzer von sehr unterschiedlichen OpenID-Anbietern akzeptieren. Andererseits muss ein SAML-Anbieter normalerweise im Voraus codiert werden, und Sie bündeln Ihre Anwendung nur mit ausgewählten Identitätsanbietern. Es ist möglich, die Liste der akzeptierten OpenID-Identitätsanbieter einzugrenzen, aber ich denke, dies würde gegen das allgemeine OpenID-Konzept verstoßen.
Mit OpenID akzeptieren Sie Identitäten, die von beliebigen Servern stammen. Jemand behauptet zu sein http://someopenid.provider.com/john.smith
. Wie werden Sie dies mit einem Benutzer in Ihrer Datenbank abgleichen? Zum Beispiel, indem Sie diese Informationen in einem neuen Konto speichern und erkennen, wenn der Benutzer Ihre Website erneut besucht. Beachten Sie, dass anderen Informationen über den Benutzer (einschließlich seines Namens oder seiner E-Mail-Adresse) nicht vertraut werden kann!
Wenn andererseits zwischen Ihrer Anwendung und dem SAML-ID-Anbieter eine explizite Vertrauensstellung besteht, können Sie vollständige Informationen über den Benutzer einschließlich Name und E-Mail-Adresse abrufen. Diese Informationen können nur aufgrund der Vertrauensstellung als vertrauenswürdig eingestuft werden. Dies bedeutet, dass Sie eher glauben, dass der ID-Anbieter alle Informationen irgendwie validiert hat, und dass Sie ihm auf Anwendungsebene vertrauen können. Wenn Benutzer mit SAML-Token kommen, die von einem unbekannten Anbieter ausgestellt wurden, lehnt Ihre Anwendung die Authentifizierung lediglich ab.
(Abschnitt hinzugefügt 07-2017, erweitert 08-2018)
Diese Antwort stammt aus dem Jahr 2011 und zu diesem Zeitpunkt stand OpenID für OpenID 2.0 . Später, irgendwann im Jahr 2012, wurde OAuth2.0 veröffentlicht und 2014 OpenID Connect (eine detailliertere Zeitleiste hier ).
Für jeden, der dies heutzutage liest - OpenID Connect ist nicht dieselbe OpenID, auf die sich die ursprüngliche Antwort bezieht , sondern eine Reihe von Erweiterungen für OAuth2.0.
Während diese Antwort aus konzeptioneller Sicht etwas Licht ins Dunkel bringen kann, ist eine sehr prägnante Version für jemanden mit OAuth2.0-Hintergrund, dass OpenID Connect tatsächlich OAuth2.0 ist , aber eine Standardmethode zum Abfragen der Benutzerinformationen nach dem Zugriffstoken hinzufügt ist verfügbar.
In Bezug auf die ursprüngliche Frage: Was ist der Hauptunterschied zwischen OpenID Connect (OAuth2.0) und SAML darin, wie die Vertrauensbeziehung zwischen der Anwendung und dem Identitätsanbieter aufgebaut wird:
SAML baut die Vertrauensbeziehung auf einer digitalen Signatur auf. Vom Identitätsanbieter ausgegebene SAML-Token sind signierte XMLs. Die Anwendung überprüft die Signatur selbst und das von ihr vorgelegte Zertifikat. Die Benutzerinformationen sind unter anderem in einem SAML-Token enthalten.
OAuth2 erstellt die Vertrauensstellung bei einem direkten HTTP-Aufruf von der Anwendung an die Identität. Die Anforderung enthält das Zugriffstoken (von der Anwendung während des Protokollflusses erhalten) und die Antwort enthält die Informationen über den Benutzer.
OpenID Connect erweitert dies weiter, um es zu ermöglichen, die Identität ohne diesen zusätzlichen Schritt zu erhalten, der den Anruf von der Anwendung an den Identitätsanbieter beinhaltet. Die Idee basiert auf der Tatsache, dass OpenID Connect-Anbieter tatsächlich zwei Token ausgeben access_token
, das gleiche, das OAuth2.0- Token und das neue, id_token
das ein JWT- Token ist, das vom Identitätsanbieter signiert wurde. Die Anwendung kann das verwenden id_token
, um eine lokale Sitzung basierend auf den im JWT-Token enthaltenen Ansprüchen einzurichten. Sie id_token
kann jedoch nicht zum weiteren Abfragen anderer Dienste verwendet werden. Bei solchen Aufrufen von Diensten Dritter sollte das weiterhin verwendet werdenaccess_token
. Sie können sich OpenID Connect dann als Hybrid zwischen SAML2 (signiertes Token) und OAuth2 (Zugriffstoken) vorstellen, da OpenID Connect nur beides umfasst.
OpenID und SAML2 basieren beide auf demselben Konzept der Verbundidentität. Im Folgenden sind einige der Unterschiede zwischen ihnen aufgeführt.
Abgesehen von den technischen Details, die für die Partei ziemlich spät sind, verstehe ich, dass der größte Unterschied zwischen SAML und anderen Authentifizierungsstandards (inkl. OpenID) darin besteht
Für SAML müssen sich der Identity Provider (IDP) und der Service Provider (SP) vorab kennen, vorkonfiguriert , statisch authentifiziert und autorisiert sein. OpenId (+ Connect) hat keine solche Anforderung.
Dies ist wichtig für IDPs, die die vollständige Kontrolle darüber haben möchten, wer auf die Daten zugreift. Ein Teil des Standards besteht darin, zu konfigurieren, was für bestimmte SPs bereitgestellt wird.
Beispielsweise möchte eine Bank möglicherweise nicht, dass ihre Benutzer auf andere Dienste als einige vordefinierte zugreifen (aufgrund von Vorschriften oder anderen strengen Sicherheitsregeln).
Dies bedeutet nicht, dass ein OpenId-IDP eine solche Einschränkung nicht durchsetzen kann. Ein OpenID-Implementierer kann den Zugriff steuern, dies ist jedoch nicht der Zweck von OpenID.
Abgesehen von den vordefinierten, strengen, statischen Unterschieden bei der Zugriffskontrolle sind OpenID Connect und SAML konzeptionell (nicht technisch) ähnlich.
Fazit: Wenn Sie ein SP sind, sollten Sie die Anforderungen Ihrer Kunden unterstützen:
Sowohl SAML als auch OpenID können als Identitätsanbieter (abgekürzt IdP) fungieren, dh als dezentrales Authentifizierungsprotokoll (Single Sign-On-Identität).
Die S ICHERHEIT A ssertion M arkup L anguage ( SAML ) ist ein Satz von Profilen für in Sicherheitsdomänen Authentifizierungs- und Autorisierungsdaten austauscht. Im SAML-Domänenmodell ist ein Identitätsanbieter eine spezielle Art von Authentifizierungsberechtigung. Insbesondere ist ein SAML-Identitätsanbieter eine Systementität, die Authentifizierungszusicherungen in Verbindung mit einem SSO-Profil von SAML ausgibt. Eine vertrauende Partei, die diese Authentifizierungszusicherungen verwendet, wird als SAML-Dienstanbieter bezeichnet. Quelle
O pen ID C onnect ( OIDC ) ist eine Authentifizierungsschicht über OAuth 2.0, einem Autorisierungsframework. Der Standard wird von der OpenID Foundation kontrolliert. OAuth ist eher für das Autorisierungsprotokoll als für ein Authentifizierungsprotokoll gedacht, und OpenID wurde speziell als Authentifizierungsprotokoll entwickelt. OIDC verwendet einfache JSON-Web-Token (JWT), die von JavaScript leichter verwendet werden können.
Verwenden Sie OAuth, wenn sich Ihre Benutzer möglicherweise nur mit Facebook oder Twitter anmelden möchten. Verwenden Sie OpenID, wenn Ihre Benutzer Nackenbärte sind, die ihre eigenen OpenID-Anbieter betreiben, weil sie "nicht möchten, dass andere ihre Identität besitzen".