Wie können Computer in Ihrer Abwesenheit einander vertrauen und gleichzeitig Sicherheit und Datenschutz gewährleisten?
- Trockener Martini. In einem großen Glas.
- Oui, Monsieur. [Ja, Monsieur (Fr.)]
"Nur eine Sekunde, nicht alle." Drei Finger von Gordon, einer von Wodka, ein halber Finger von Kina Lyklet. In einem Shaker gut schlagen und dann eine große Zitronenscheibe hineinlegen. Erinnerst du dich?
Jan Fleming, Casino Royale, 1953
Teil 1. OAuth 2.0- und OpenID Connect-Geschichten
Universal und anscheinend im 21. Jahrhundert heißt OAuth + OIDC das beliebteste Paket von Open-Access-Delegierungs- und Authentifizierungsprotokollen. Besser für den Massengebrauch haben sich bisher nichts ausgedacht. Sie sind besonders bei Front-End-Anbietern beliebt, da sie auf HTTP (S) -Protokollen aufbauen und den JWT-Container (
JSON Web Token ) verwenden. OpenID Connect verwendet OAuth für seine Arbeit oder mit anderen Worten, OIDC ist ein Wrapper für OAuth.
OpenID - ein offener Standard für die Authentifizierung und die Erstellung digitaler Identifikationssysteme ist für Entwickler nicht neu. In diesem Jahr wird er 14 Jahre alt. In der aktuellen dritten Version lautet der vollständige Name OpenID Connect oder ist kürzer als OIDC. Es ist sowohl in der Web- und Mobilentwicklung als auch in Unternehmenssystemen beliebt.
Sein Partner, der OAuth Open Access Delegation Standard, wird 12 Jahre alt. Und 9 Jahre nach Erscheinen des entsprechenden RFC 5849-Standards werden wir uns auf die moderne Version des OAuth 2.0-Protokolls und den aktuellen
RFC 6749 verlassen . Denken Sie daran, dass OAuth 2.0 nicht mit seinem Vorgänger OAuth 1.0 kompatibel ist.
OAuth - ein offenes Protokoll (Schema, Transport) zum Delegieren des Zugriffs, das es Dritten ermöglicht, eingeschränkten Zugriff auf die geschützten Ressourcen des Benutzers zu gewähren, ohne dass sie (Drittanbieter) die Anmeldung und das Kennwort von RFC 6749 übertragen müssen
oauth.net ist die führende OAuth-Website von Aaron Parecki
oauth.com - OAuth Tutorial und Testumgebung
Open ID Connect (OIDC) ist ein offener Standard für dezentrale Identifikationssysteme, mit dem der Benutzer mithilfe von Diensten von Drittanbietern ein einziges Konto für die Identifizierung auf einer Vielzahl nicht verwandter Internetressourcen erstellen kann, OAuth-Nachrichten und einen JWT-Container für die sichere Kommunikation verwendet.
Genau genommen ist OAuth kein Protokoll, sondern ein Satz von Regeln (Schema) zum Trennen und Übertragen von Benutzeridentifikationsvorgängen an einen separaten vertrauenswürdigen Server, wenn die Architektur der Zugriffssteuerungsabgrenzung in Softwaresystemen implementiert wird.
Und Achtung,
OAuth kann nichts über einen bestimmten Benutzer sagen ! Weder wer er ist, noch wo er jetzt ist, noch ob er jetzt am Computer arbeitet oder nicht. Dann ist es jedoch möglich, ohne Eingreifen des Benutzers mit bereits ausgestellten Zugriffstoken mit Systemen zu interagieren. Dies ist ein wichtiger Punkt.
Es kann nützlich sein:
- OAuth lässt sich perfekt mit der Verwendung der XACML- Attributzugriffsbeschreibungssprache kombinieren
- OAuth setzt auch auf User-Managed Access ( UMA )
Die gemeinsame Nutzung von OAuth + OIDC + UMA ermöglicht die Implementierung von Systemen zur sicheren Identifizierung und Zugriffskontrolle (Identity and Access Management - IdM, IAM) in verschiedenen Themenbereichen, zum Beispiel:
- Verwenden des HEART- Profils (Health Relationship Trust) der persönlichen Daten eines Patienten in der Medizin
- auf CIAM-Kundenidentifikationsplattformen (Consumer Identity and Access Management) für Fertigungs- und Handelsunternehmen
- Personalisierung digitaler Zertifikate von Smart Devices in IoT-Systemen (Internet of Things)
Ein neuer Venn der Zugriffskontrolle für die API-WirtschaftSpeichern Sie personenbezogene Daten vor allem nicht am selben Ort wie der Rest des Systems. Separate physische Authentifizierung und Autorisierung. Und noch besser - geben Sie der Person den gesamten Ausweis persönlich und bewahren Sie ihn niemals bei sich auf. Vertrauen Sie dem Gerätebesitzer.
Apple sagte, welche persönlichen Daten Russen in Russland speichern. Dies ist der Name, die Adresse, die E-Mail-Adresse und die Telefonnummer. Aber Nachrichten, Fotos usw. Die Menschen selbst vertrauen der iCloud-Cloud (die sich nicht in Russland befindet).
Teil 2. Kurzspiel „Vertrauen und Authentifizierung“
Daher haben wir beschlossen, dass es nicht unumgänglich ist, die persönlichen Daten unserer lieben Benutzer weder in unserer Anwendung noch in einem einzigen Speicher zusammen mit einer funktionierenden Datenbank zu speichern. Das heißt, sie haben einen zuverlässigen Treuhänder ausgewählt, der uns diesen Service bietet. Wenn also Seine Majestät der Benutzer erscheint, bieten wir den folgenden Dialog.
Schauspieler:
- Benutzer
- Client-Anwendung
- Identitätsdienst
- Ressourcenserver
Die Aktion findet in einem Browser auf dem Computer des Benutzers statt. Alle Charaktere sind seit langem miteinander vertraut. Der Benutzer hat ein persönliches Konto im Identitätsdienst. Die Client-Anwendung hat einen unterzeichneten gültigen Vertrag mit dem Identifikationsdienst und den gegenseitigen Schnittstellen. Der Ressourcenserver vertraut dem Identitätsdienst bei der Ausgabe von Zugriffsschlüsseln an alle Betroffenen, die er identifizieren kann.
Benutzer (P): (durch Starten einer webbasierten Client-Anwendung) Sehr geehrte Client-Anwendung, ich benötige "diese Ressource".
Client-Anwendung (K): Sehr geehrter Benutzer, legen Sie zuerst den Schlüssel für "diese Ressource" vor. Ohne Schlüssel ist der Zugriff auf "diese Ressource" geschlossen.
P: Ich habe keinen solchen Schlüssel.
K: Dann werde ich Sie vorübergehend zu einem Identifikationsdienst wechseln, mit dem wir eine Vereinbarung zur Ausgabe von Schlüsseln für den Ressourcenserver getroffen haben. (leitet P. an den Identifikationsdienst weiter)
Identifikationsdienst (I): Sehr geehrter Benutzer, bitte sagen Sie mir, wer Sie sind und welche Schlüssel Sie benötigen.
P: Ich, Ytsuken User User, das Passwort ist so und so, ich möchte Zugriff auf "diese Ressource" erhalten.
Und: Danke, Genosse Jtsuken. Die Authentifizierung war erfolgreich und Ihre Identifikation wird überprüft. Hier ist der Schlüssel zu „dieser Ressource“ (P. leitet zurück zu K.)
P: Client, ich habe Ihnen den Schlüssel zu der „Ressource“ gebracht, die ich brauche.
K: Danke Benutzer. Der Schlüssel ist richtig. Hier ist die "Ressource", die Sie angefordert haben.
Der Vorhang.
Die Eröffnungssinfonie von Richard Strauss aus dem Film „Space Odyssey of 2001“
spieltTeil 3. Echter Autorisierungsdienst
Kommen wir jetzt zur Sache. Wir haben drei Aufgaben auf der Tagesordnung: die Charaktere zu ernennen, die Bühne vorzubereiten und das Stück zu spielen. Und auf der InterSystems IRIS-Plattform wird alles auf einmal entschieden. Dies ist jedoch nicht erforderlich. Sie können nach eigenem Ermessen ein Design von verschiedenen Plattformen zusammenstellen. Beispiel: In dieser Kombination: OAuth Keycloak-Server + OAuth-Client und OAuth-Ressource in IRIS. Mit anderen Worten:
- Konfigurieren und starten Sie den OAuth-Server mit der Registrierung unseres Demo-Clients.
- Richten Sie einen Demo-OAuth-Client ein, indem Sie ihn mit dem OAuth-Server und den Webressourcen verbinden.
- Entwickeln Sie Clientanwendungen, die OAuth verwenden können. Sie können Java, Python, C #, NodeJS verwenden. Das Folgende ist ein Beispiel für einen Anwendungscode in ObjectScript.
Die Website der Entwicklergemeinde enthält eine ausführliche Anleitung von Daniel Kutak in drei Teilen mit Beispielen für die Verwendung von OAuth in IRIS für verschiedene Anwendungen, die auf CSP basieren ( Teil 1 , Teil 2 , Teil 3 ).
Es gibt viele Einstellungen in OAuth. Schreiben Sie sich daher selbst Checklisten - dies ist die korrekteste Anwendung für sie. Beispiele und Leerzeichen unten.
Wo bekomme ich fertiges InterSystems IRIS für ein Beispiel? Jedem stehen mindestens zwei Optionen zur Verfügung:
Holen Sie sich einen vorgefertigten vorkonfigurierten Cloud-IRIS-Server auf der InterSystems Learning Services-Schulungsplattform im Abschnitt InterSystems Learning Labs.
Installieren Sie einen vorgefertigten Docker-Container . Lesen Sie mehr im Artikel - eine schrittweise Anleitung für Anfänger des Startens von IRIS mit Docker- Entwicklern oder, die ein Video bevorzugen, eine Screencast-Anleitung zum Entwickeln von Lösungen mit InterSystems IRIS mit Docker und VSCode
1-1 Konfigurieren des OAuth-Servers
Wir gehen in das IRIS-Verwaltungsportal und wählen den Abschnitt aus:
Systemadministration >> Sicherheit >> OAuth 2.0 >> Server
Als nächstes wird in jedem Absatz ein Name für die Einstellungszeile und gegebenenfalls über den Doppelpunkt ein Beispiel oder eine Erklärung angegeben.
Registerkarte "Allgemeine Einstellungen":Beschreibung: optional, zum Beispiel "Autorisierungsserver"
Der Generatorendpunkt (im Folgenden CTG) ist der Hostname: DNS-Name Ihres Servers
Unterstützte Berechtigungstypen (wählen Sie mindestens einen aus):
Autorisierungscode
Implizit
Anmeldeinformationen: Ressource, Eigentümer, Passwort
Kundenanmeldeinformationen
SSL / TLS-Konfiguration: oauthserver
Registerkarte "Berechtigungen":Fügen Sie unterstützte Volumes hinzu: z. B. scope1 und scope2
Registerkarte Intervalle:Zugriffsschlüsselintervall: 3600
Autorisierungscode-Intervall: 60
Schlüsselintervall aktualisieren: 86400
Sitzungsunterbrechungsintervall: 86400
Gültigkeitsdauer des Client-Schlüssels: 0
Registerkarte "JWT-Einstellungen":Eingabealgorithmus: RS512
Schlüsselverwaltungsalgorithmus: RSA-OAEP
Algorithmus zur Inhaltsverschlüsselung: A256CBC-HS512
Registerkarte "Customizing":Identifizieren Sie die Klasse:% OAuth2.Server.Authenticate
Überprüfen Sie die Benutzerklasse:% OAuth2.Server.Validate
Sitzungsdienstklasse: OAuth2.Server.Session
Generieren Sie die Schlüsselklasse:% OAuth2.Server.JWT
Anpassungs-Namespace:% SYS
Anpassungsrollen (wählen Sie mindestens eine aus):% DB_IRISSYS und% Manager
Speichern.
1-2 Registrieren Sie den Client auf dem OAuth-Server

Schaltfläche "Kundenbeschreibung" >> Schaltfläche "Kundenbeschreibung erstellen":
Registerkarte "Allgemeine Einstellungen":Name: KUNDE
Beschreibung: beliebig
Client-Typ: Vertraulich
URLs umleiten: Die Rückgabeadresse in unserer Anwendung nach der Authentifizierung
Unterstützte Berechtigungstypen
Autorisierungscode: ja
Implizit
Anmeldeinformationen: Ressource, Eigentümer, Passwort
Kundenanmeldeinformationen
JWT-Autorisierung
Unterstützte Antworttypen
Code
id_token
id_token Schlüssel
Token
Berechtigungsart: Einfach
Registerkarte "Client-Anmeldeinformationen": Automatisch ausgefüllt
Registerkarte "Kundeninformationen":URL starten:
Anmeldebildschirm
Kundenname
Logo URL
URL der Client-Startseite
Richtlinien-URL
Service-URL-Bedingungen
2-1 Konfigurieren der Bindung auf dem OAuth-Server-Client
Systemadministration >> Sicherheit >> OAuth 2.0 >> Client

Erstellen Sie eine Serverbeschreibung:
Generatorendpunkt: Entnehmen Sie den allgemeinen Serverparametern, siehe oben
SSL / TLS-Konfiguration: Wählen Sie aus der Liste der vorkonfigurierten
Der Inhalt der verbleibenden Felder wird automatisch vom Server heruntergeladen. Sie können sie jedoch auch manuell konfigurieren:
Autorisierungsserver
Autorisierungsendpunkt: CTG + / autorisieren
Schlüsselendpunkt: CTG + / Token
Benutzerinformationsendpunkt: CTG + / Benutzerinfo
Wichtiger Endpunkt der Eigendiagnose: CTG + / Widerruf
Schlüsselwiderrufsendpunkt: CTG + / Selbstbeobachtung
JSON-Web-Token-Einstellungen (JWT)
Andere Quelle neben der dynamischen Registrierung: Wählen Sie JWKS aus der URL
URL: CTG + / jwks

Aus dieser Liste ist beispielsweise ersichtlich (scopes_supported und Claims_supported), dass der Server dem OAuth-Client verschiedene Informationen über den Benutzer bereitstellen kann. Beachten Sie außerdem, dass Sie den Benutzer bei der Implementierung Ihrer Anwendung fragen müssen, welche Daten er freigeben möchte. In unserem Beispiel werden wir nur von scope1 um Erlaubnis gebeten.
Speichern.
Wenn ein Fehler bei der Anzeige von SSL auftritt, gehen Sie zu den Einstellungen:
Systemadministration >> Sicherheit >> SSL / TSL-Konfiguration
2-2 Konfigurieren des OAuth-Clients
Systemadministration >> Sicherheit >> OAuth 2.0 >> Client >> Client-Konfiguration >> Client-Konfiguration erstellen
Registerkarte "Allgemein":Anwendungsname: Demo-Client
Client-Name: Demo-Client
Beschreibung: optional
Aktiviert: Ja
Client-Typ: Vertraulich
SSL / TCL-Konfiguration: oauthclient
Client-Weiterleitungs-URL: DNS-Name Ihres Servers
Erforderliche Berechtigungsarten
Autorisierungscode: ja
Implizit
Anmeldeinformationen: Ressource, Eigentümer, Passwort
Kundenanmeldeinformationen
JWT-Autorisierung
Berechtigungsart: Einfach
Registerkarte "Kundeninformationen":Anmeldebildschirm
Logo URL
URL der Client-Startseite
Richtlinien-URL
Service-URL-Bedingungen
Standardvolume: Wir verwenden die zuvor auf dem Server angegebenen, z. B. scope1
Kontakt-E-Mail-Adressen (durch Komma getrennt)
Maximales Standardalter (in Sekunden)
Registerkarte "JWT-Einstellungen":JSON-Web-Token-Einstellungen (JWT)
Erstellen von JWT-Einstellungen aus X509-Anmeldeinformationen
IDToken-Algorithmen
Unterzeichnung: RS256
Verschlüsselung: A256CBC
Schlüssel: RSA-OAEP
Userinfo-Algorithmen
Zugriff auf Token-Algorithmen
Abfragealgorithmen
Registerkarte "Client-Anmeldeinformationen":Id Client: von demjenigen, der bei der Registrierung des Clients auf dem Server ausgestellt wurde (siehe oben)
Kundenausweis ausgestellt
Client-Geheimnis: von dem, das bei der Registrierung des Clients auf dem Server ausgegeben wurde (siehe oben)
Das Client-Geheimnis läuft ab
Kundenregistrierungs-URI
Speichern.
Teil 4. Code
Erstellen wir eine minimalistische Webanwendung mit OAuth-Berechtigung und REST.
Bei der Arbeit verlässt sich OAuth darauf, dass die Kommunikationskanäle zwischen den Teilnehmern an der Interaktion (Server, Clients, Webanwendung, Benutzerbrowser, Ressourcenserver) irgendwie geschützt sind. Am häufigsten wird diese Rolle von SSL / TLS gespielt. OAuth funktioniert aber auch auf unsicheren Kanälen. Beispielsweise verwendet der Keycloak-Server standardmäßig das HTTP-Protokoll und ist nicht geschützt. Dies vereinfacht die Entwicklung und das Debuggen während der Entwicklung. Bei der tatsächlichen Nutzung von OAuth-Diensten muss der Kanalschutz unbedingt aktiviert sein - dies wird in der Keycloak-Dokumentation aufgezeichnet. InterSystems IRIS-Entwickler verfolgen einen strengeren Ansatz für OAuth - SSL / TSL ist erforderlich. Die einzige Vereinfachung besteht darin, dass Sie selbstsignierte Zertifikate oder den in IRIS integrierten PKI-Dienst (Systemadministration >> Sicherheit >> Public Key System) verwenden können.
Die Benutzerautorisierung wird mit der expliziten Angabe von zwei Parametern überprüft - dem Namen Ihrer Anwendung und dem vom OAuth-Server und im OAuth-Client unterstützten Volume (Gültigkeitsbereich - Ich frage mich, wie ich ihn auf Russisch richtig benennen kann?):
Parameter OAUTH2APPNAME = "OAuthClient"; set isAuthorized = ##class(%SYS.OAuth2.AccessToken).IsAuthorized( ..#OAUTH2APPNAME, .sessionId, "scope1", .accessToken, .idtoken, .responseProperties, .error)
In Ermangelung einer Genehmigung bereiten wir einen Link zu einer Anfrage zur Benutzeridentifikation vor und erhalten von ihm die Erlaubnis, mit unserer Anwendung zu arbeiten. Hier müssen wir nicht nur den Anwendungsnamen und das angeforderte Volume (Bereich) angeben, die auf dem OAuth-Server und im OAuth-Client registriert sind, sondern auch einen Backlink, an den die Webanwendung den Benutzer zurückgeben soll.
Parameter OAUTH2CLIENTREDIRECTURI = "https://52773b-76230063.labs.learning.intersystems.com/oauthclient/" set url = ##class(%SYS.OAuth2.Authorization).GetAuthorizationCodeEndpoint( ..#OAUTH2APPNAME, "scope1", ..#OAUTH2CLIENTREDIRECTURI, .properties, .isAuthorized, .sc)
Wir verwenden den integrierten IRIS-Authentifizierungsdienst und registrieren dementsprechend Benutzer auf dem OAuth-IRIS-Server. Zum Beispiel reicht es aus, dem Benutzer nur einen Benutzernamen und ein Passwort festzulegen. Sie müssen keine weiteren Einstellungen im Konto vornehmen.
Wenn der Benutzer über den empfangenen Link übertragen wird, führt der Server das Benutzeridentifizierungsverfahren durch und fordert von ihm die Erlaubnis an, mit Anmeldeinformationen in der Webanwendung zu arbeiten. Außerdem speichert er das Ergebnis in seiner globalen OAuth2.Server.Session im Bereich% SYS:


3. Demonstrieren Sie die Daten eines autorisierten Benutzers. Nach erfolgreichem Abschluss der Prozeduren verfügen wir beispielsweise über ein Zugriffstoken. Lass es uns verstehen:
set valid = ##class(%SYS.OAuth2.Validation).ValidateJWT( .#OAUTH2APPNAME, accessToken, "scope1", .aud, .JWTJsonObject, .securityParameters, .sc )
Vollständiger Arbeitscode eines Beispiels für die Arbeit mit OAuth: Class OAuthClient.REST Extends %CSP.REST { Parameter OAUTH2APPNAME = "OAuthClient"; Parameter OAUTH2CLIENTREDIRECTURI = "https://52773b-76230063.labs.learning.intersystems.com/oauthclient/"; // to keep sessionId Parameter UseSession As Integer = 1; XData UrlMap [ XMLNamespace = "http://www.intersystems.com/urlmap" ] { <Routes> <Route Method="GET" Url = "/" Call = "Do" /> </Routes> } ClassMethod Do() As %Status { // Check for accessToken set isAuthorized = ##class(%SYS.OAuth2.AccessToken).IsAuthorized( ..#OAUTH2APPNAME, .sessionId, "scope1", .accessToken, .idtoken, .responseProperties, .error) // to show accessToken if isAuthorized { set valid = ##class(%SYS.OAuth2.Validation).ValidateJWT( ..#OAUTH2APPNAME, accessToken, "scope1", .aud, .JWTJsonObject, .securityParameters, .sc ) &html< Hello!<br> > w "You access token = ", JWTJsonObject.%ToJSON() &html< </html> > quit $$$OK } // perform the process of user and client identification and get accessToken set url = ##class(%SYS.OAuth2.Authorization).GetAuthorizationCodeEndpoint( ..#OAUTH2APPNAME, "scope1", ..#OAUTH2CLIENTREDIRECTURI, .properties, .isAuthorized, .sc) if $$$ISERR(sc) { w "error handling here" quit $$$OK } // url magic correction: change slashes in the query parameter to its code set urlBase = $PIECE(url, "?") set urlQuery = $PIECE(url, "?", 2) set urlQuery = $REPLACE(urlQuery, "/", "%2F") set url = urlBase _ "?" _ urlQuery &html< <html> <h1> IRIS OAuth2</h1> <a href = "#(url)#"> <b>IRIS</b></a> </html> > quit $$$OK } }
Aktivieren Sie bei Bedarf erweiterte Debugging-Nachrichten auf dem OAuth-Server und dem OAuth-Client. Nachrichten werden in den globalen ISCLOG im Bereich% SYS geschrieben. Geben Sie Ihr IRIS-Terminal ein (oder installieren und verwenden Sie ein
Web-Terminal ):
set ^%ISCLOG = 5 set ^%ISCLOG("Category", "OAuth2") = 5 set ^%ISCLOG("Category", "OAuth2Server") = 5
Weitere Informationen finden Sie in der IRIS-Dokumentation
Verwenden von OAuth 2.0 und OpenID Connect .
Schlussfolgerungen:
- OAuth hilft bei der physischen und geografischen Trennung von Diensten mit Benutzeranmeldeinformationen und "funktionierenden" Datenbanken. Und dadurch den Schutz von Identifikationsdaten stärken und erforderlichenfalls die Anforderungen der Gesetze zum Schutz personenbezogener Daten verschiedener Länder erfüllen.
- Mit OAuth können Sie dem Benutzer die Möglichkeit geben, gleichzeitig sicher von mehreren Geräten aus zu arbeiten und seine persönlichen Daten minimal auf verschiedene Dienste und Anwendungen zu übertragen. Sie nehmen nicht nur „redundante“ Informationen über Benutzer in ihren Diensten auf, sondern führen auch eine depersonalisierte Datenverarbeitung in ihren Diensten durch.
- Wenn Sie InterSystems IRIS verwenden, verfügen Sie über einen vollständigen Satz vorgefertigter Tools zum Testen und Bereitstellen von OAuth- und OIDC-Diensten, sowohl eigenständig als auch in Zusammenarbeit mit Softwareprodukten von Drittanbietern.
Welche Branchen nutzen die InterSystems IRIS-Plattform am häufigsten?
Für die Automatisierung des Gesundheitswesens, im Finanzsektor, für E-Government-Projekte, in der Logistik, im Einzelhandel und in vielen anderen Branchen.
Wenn Sie sich für die Aufgaben der Automatisierung des Gesundheitswesens interessieren, beachten Sie den FHIR-Standard. InterSystems IRIS for Health (eine spezielle Version der InterSystems IRIS-Plattform) unterstützt den FHIR-Standard für Integration und Anwendungsentwicklung
Wie Sie oben sehen können, sind alle OAuth-Funktionen leicht zugänglich und vollständig einsatzbereit. Bei Bedarf können Sie die Handlerklassen und Benutzeroberflächen durch Ihre eigenen ersetzen. OAuth-Server- und Clienteinstellungen können aus Konfigurationsdateien vorgenommen werden, anstatt das Verwaltungsportal zu verwenden.