Heim >Backend-Entwicklung >Python-Tutorial >Single Sign-On (SSO) erklärt
Wenn Sie ein Produkt für die Massen entwickeln, ist es sehr selten, dass Sie ein völlig eigenständiges Produkt entwickeln würden, das nicht mit einem anderen Service interagiert. Wenn Sie einen Dienst von Drittanbietern verwenden, ist die Benutzerauthentifizierung eine relativ schwierige Aufgabe, da verschiedene Anwendungen unterschiedliche Mechanismen haben, um Benutzer zu authentifizieren. Eine Möglichkeit, dieses Problem zu lösen, besteht
einzelnes Anzeichen für (SSO) ist ein Prozess, der es einem Benutzer ermöglicht, auf mehrere Dienste zuzugreifen, nachdem die Benutzerauthentifizierung (d. H. Anmelden) nur einmal durchgeführt wurde. Dies beinhaltet die Authentifizierung in allen Diensten, die der Benutzer nach dem Anmelden in einem primären Dienst die Berechtigung erteilt hat. SSO vermeidet unter anderem die monotone Aufgabe, die Identität immer wieder durch Passwörter oder andere Authentifizierungssysteme zu bestätigen.Schauen wir uns SSO ausführlicher an und wir werden einen sehr bekannten Dienst anwenden, um seine Verwendungen und Vorteile zu demonstrieren.
Der Authentifizierungsprozess
Ein gutes Beispiel für die Verwendung von SSO ist in den Diensten von Google. Sie müssen nur für ein primäres Google -Konto angemeldet werden, um auf verschiedene Dienste wie YouTube, Google Mail, Google, Google Analytics und mehr zuzugreifen.
Wenn Sie Ihr eigenes Produkt bauen, müssen Sie sicherstellen, dass alle Komponenten dieselbe Authentifizierung verwenden. Dies ist einfach zu tun, wenn alle Ihre Dienste auf Ihre eigene Codebasis beschränkt sind. Bei beliebten Diensten wie Disqus Kommentarsystem und Freshdesk für das Kundenbeziehungsmanagement ist es jedoch eine gute Idee, diese zu verwenden, anstatt Ihre eigenen von Grund auf neu zu erstellen.
, aber ein Problem tritt durch die Nutzung solcher Dienste von Drittanbietern auf. Da ihr Code auf seinen jeweiligen Servern gehostet wird, muss sich der Benutzer explizit bei seinen Diensten anmelden, auch wenn er auf Ihrer Website angemeldet ist. Die Lösung ist, wie erwähnt, die Implementierung von SSO.
Idealerweise erhalten Sie ein Paar Schlüssel - öffentlich und privat. Sie generieren ein Token für einen angemeldeten Benutzer und senden ihn zusammen mit Ihrem öffentlichen Schlüssel zur Überprüfung an den Dienst. Bei Überprüfung wird der Benutzer automatisch in den Dienst angemeldet. Um dies besser zu verstehen, verwenden wir ein echtes Beispiel.
disqus ist ein beliebter Kommentar -Hosting -Service für Websites, der eine Menge Funktionen wie Social Network Integration, Moderation Tools, Analytics und sogar die Möglichkeit bietet, Kommentare zu exportieren. Es begann als Ycombinator -Startup und hat sich zu einer der beliebtesten Websites der Welt entwickelt!
Da das DISQUS -Kommentarsystem in Ihre Seiten eingebettet ist, ist es wichtig, dass sich der Benutzer innerhalb von DISQUS nicht zum zweiten Mal anmelden muss, wenn er oder sie bereits auf Ihrer Website angemeldet ist. Disqus hat eine API mit umfassender Dokumentation zur Integration von SSO.
Sie generieren zunächst einen Schlüssel namens remote_auth_s3 für einen angemeldeten Benutzer, der Ihre privaten und öffentlichen Disqus -API -Schlüssel verwendet. Sie erhalten die öffentlichen und privaten Schlüssel, wenn Sie SSO als kostenloses Add-On in Disqus registrieren.
Sie übergeben die Informationen des Benutzers (ID, Benutzername und E -Mail) an die Authentifizierung als JSON. Sie generieren eine Nachricht, die Sie verwenden müssen, während Sie das ISQUS -System auf Ihrer Seite rendern. Um es besser zu verstehen, schauen wir uns ein Beispiel in Python an.
Die Code -Beispiele in einigen beliebten Sprachen wie Php, Ruby und Python werden von disqus auf Github bereitgestellt.
Beispielpython -Code (auf GitHub gefunden, um sich in einem Benutzer auf Ihrer Website anzumelden, lautet wie folgt.
<span>import base64 </span><span>import hashlib </span><span>import hmac </span><span>import simplejson </span><span>import time </span> DISQUS_SECRET_KEY <span>= '123456' </span>DISQUS_PUBLIC_KEY <span>= 'abcdef' </span> <span>def get_disqus_sso(user): </span> <span># create a JSON packet of our data attributes </span> data <span>= simplejson.dumps({ </span> <span>'id': user['id'], </span> <span>'username': user['username'], </span> <span>'email': user['email'], </span> <span>}) </span> <span># encode the data to base64 </span> message <span>= base64.b64encode(data) </span> <span># generate a timestamp for signing the message </span> timestamp <span>= int(time.time()) </span> <span># generate our hmac signature </span> sig <span>= hmac.HMAC(DISQUS_SECRET_KEY, '%s %s' % (message, timestamp), hashlib.sha1).hexdigest() </span> <span># return a script tag to insert the sso message </span> <span>return """<script type="text/javascript"> </span><span> var disqus_config = function() { </span><span> this.page.remote_auth_s3 = "%(message)s %(sig)s %(timestamp)s"; </span><span> this.page.api_key = "%(pub_key)s"; </span><span> } </span><span> </script>""" % dict( </span> message<span>=message, </span> timestamp<span>=timestamp, </span> sig<span>=sig, </span> pub_key<span>=DISQUS_PUBLIC_KEY, </span> <span>)</span>
Sie senden dieses generierte Token zusammen mit Ihrem öffentlichen Schlüssel in eine JavaScript -Anfrage zusammen mit Ihrem öffentlichen Schlüssel. Wenn die Authentifizierung überprüft wird, hat das generierte Kommentarsystem den Benutzer bereits angemeldet. Wenn Sie Probleme haben, können Sie in den ISQUS -Entwicklern Google Group um Hilfe bitten.
Wir können die Implementierung von SSO im Blog Bowl sehen, ein Verzeichnis von Blogs, die in Python/Django entwickelt wurden. Wenn Sie auf der Website angemeldet sind, sollten Sie angemeldet sein, wenn das Disqus -Kommentarsystem gerendert wird. In diesem Beispiel speichert das Personobjekt die ID (die für jede Person auf der Website eindeutig ist), E -Mail und Pen_Name. Die Nachricht wird wie unten gezeigt generiert.
<span>import base64 </span><span>import hashlib </span><span>import hmac </span><span>import simplejson </span><span>import time </span> DISQUS_SECRET_KEY <span>= '123456' </span>DISQUS_PUBLIC_KEY <span>= 'abcdef' </span> <span>def get_disqus_sso(user): </span> <span># create a JSON packet of our data attributes </span> data <span>= simplejson.dumps({ </span> <span>'id': user['id'], </span> <span>'username': user['username'], </span> <span>'email': user['email'], </span> <span>}) </span> <span># encode the data to base64 </span> message <span>= base64.b64encode(data) </span> <span># generate a timestamp for signing the message </span> timestamp <span>= int(time.time()) </span> <span># generate our hmac signature </span> sig <span>= hmac.HMAC(DISQUS_SECRET_KEY, '%s %s' % (message, timestamp), hashlib.sha1).hexdigest() </span> <span># return a script tag to insert the sso message </span> <span>return """<script type="text/javascript"> </span><span> var disqus_config = function() { </span><span> this.page.remote_auth_s3 = "%(message)s %(sig)s %(timestamp)s"; </span><span> this.page.api_key = "%(pub_key)s"; </span><span> } </span><span> </script>""" % dict( </span> message<span>=message, </span> timestamp<span>=timestamp, </span> sig<span>=sig, </span> pub_key<span>=DISQUS_PUBLIC_KEY, </span> <span>)</span>
Im vorderen Ende drucken Sie diese Variable nur, um das Skript auszuführen. Für eine Live -Demo können Sie diesen Beitrag in der Blog -Schüssel besuchen und die unten unteren Kommentare überprüfen. Natürlich würden Sie nicht angemeldet.
Melden Sie sich als nächstes in den Blog Bowl an und besuchen Sie denselben Beitrag erneut (Sie müssen sich anmelden, um den Effekt anzuzeigen). Beachten Sie, dass Sie im folgenden Kommentarsystem angemeldet sind.
Eine weitere interessante Funktion, die der Blog Bowl bietet, ist Anonymität beim Posten von Inhalten (wie dieser Beitrag). Stellen Sie sich eine Situation vor, in der Sie möchten, dass ein Benutzer Antworten auf Kommentare zu Disqus als anonymer Benutzer (wie auf Quora) veröffentlichen. Wir haben den einfachen Ausweg genommen und eine große Anzahl an die ID angehängt. Um eine eindeutige E -Mail für den Benutzer zu verknüpfen (damit sie nicht zusammen mit anderen Kommentaren des Benutzers angezeigt wird), generieren wir auch eine eindeutige E -Mail. Dies hält Ihre anonymen Kommentare zusammen, kombiniert es jedoch nicht mit Ihrem ursprünglichen Profil oder anonymen Kommentaren anderer Benutzer.
Und hier ist der Code:
sso <span>= get_disqus_sso({ </span> <span>'id': person.id, </span> <span>'email': person.user.email, </span> <span>'username': person.pen_name </span><span>})</span>
Obwohl die SSO -Prozesse für verschiedene Dienste geringfügig variieren, ist die Grundidee dahinter dieselbe - erzeugen Sie ein Token und validieren Sie es! Ich hoffe, dieser Beitrag hat Ihnen geholfen, einen Einblick in die Integration von Anwendungen SSO zu erhalten, und vielleicht hilft Ihnen dies, SSO selbst zu implementieren.
Wenn Sie Korrekturen, Fragen oder Ihre eigenen Erfahrungen mit SSO haben, können Sie gerne kommentieren.
SSO und MFA sind beide Authentifizierungsmethoden, aber sie dienen unterschiedlichen Zwecken. SSO vereinfacht den Anmeldeprozess, indem Benutzer mit einem einzigen Satz von Anmeldeinformationen auf mehrere Anwendungen zugreifen können. Andererseits verbessert MFA die Sicherheit, indem Benutzer zwei oder mehr Identifikationsformen bereitstellen müssen, bevor er Zugriff gewährt. , SSO kann mit mobilen Anwendungen verwendet werden. Viele SSO-Lösungen bieten mobilen Support und ermöglichen es Benutzern, mit einem einzigen Satz von Anmeldeinformationen auf mehrere Apps auf ihren mobilen Geräten zugreifen zu können. Verbessert die Benutzererfahrung, indem Sie den Anmeldungsprozess vereinfachen. Benutzer müssen sich nur an eine Reihe von Anmeldeinformationen erinnern und die Frustration vergessener Passwörter verringern. Es spart auch Zeit, da Benutzer beim Zugriff auf verschiedene Anwendungen nicht wiederholt ihre Anmeldeinformationen eingeben müssen. profitieren von SSO. Branchen, die stark auf mehrere Anwendungen wie Gesundheitswesen, Bildung, Finanzen und Technologie angewiesen sind, können besonders von der Bequemlichkeit und Sicherheit profitieren, die SSO bietet.
Das obige ist der detaillierte Inhalt vonSingle Sign-On (SSO) erklärt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!