OAuth2 ist ein System, das Anwendungen dabei hilft, sicher auf die Daten eines Benutzers zuzugreifen, ohne dass dieser sein Passwort direkt teilen muss. Es gibt zwei wichtige Flows für das HIN System: der Grant Flow und der Credential Flow.
Der Grant Flow wird verwendet, wenn ein Benutzer sich bei einer Anwendung anmeldet und dieser der Anwendung den Zugriff auf die eigenen Daten gestattet. Ein Beispiel hierfür ist die Anmeldung bei einer Anwendung über ein Google-Konto, bei der der Anwendung der Zugriff auf die E-Mails des Benutzers erlaubt wird. Die Anwendung erhält einen sogenannten Autorisierungscode, den die Anwendung anschliessend gegen ein Access Token eintauscht. Dieser Token gewährt der Anwendung die Erlaubnis, auf die Daten des Benutzers zuzugreifen.
Bei uns haben wir hierfür Beispielsweise «Filebox», welcher für den Grant Flow geeignet werde. In diesem Fall ist es wichtig, welcher User die Anfrage macht, denn der Inhalt der Filebox ist pro User anders.
Der Credential Flow funktioniert anders, denn hier gibt es keinen Benutzer, der zustimmen muss. Die Anwendung fordert einfach ein Access Token an, um auf eine API oder andere Daten zuzugreifen. Dies geschieht in der Regel, wenn zwei Anwendungen/Maschinen direkt miteinander kommunizieren müssen, ohne dass ein Benutzer in den Prozess involviert ist.
Beispielsweise wäre der Service Covercard korrekt für den Credential Flow, da es hier keine Rolle spielt, wer der User ist.
Flow Charts
Vorraussetzungen
Zwei Oauth2 Flows - Vorteile & Nachteile
Der Auth Token
Bevor auf geschützte Daten oder Funktionen zugegriffen werden kann, muss in beiden Fällen – sowohl im CC Flow als auch im Grant Flow – zunächst ein Auth Token eingeholt werden. Der Prozess ist in beiden Fällen ähnlich: Das Auth Token dient als Nachweis, dass der Benutzer oder die Anwendung zum Zugriff auf die angeforderten Ressourcen berechtigt ist.
Im CC Flow(Nur Variante A) gibt es allerdings nur eine Möglichkeit, den Auth Token zu erhalten, im Gegensatz zum Grant Flow(Variante A oder B), bei dem es zwei Varianten gibt. Nachdem der Auth Token bezogen wurde, kann dieser verwendet werden, um die notwendigen API-Requests auszuführen und den Access Token. Der Hauptunterschied zwischen den beiden Flows liegt darin, wie der Token abgerufen wird, aber in beiden Fällen muss der Token vor dem Zugriff auf die Daten gültig sein.
Im Grant Flow gibt es zwei Möglichkeiten, wie der Auth Token abgerufen werden kann. Für den Credential Flow gilt nur Variante A.
Innerhalb der Gültigkeitsdauer muss der Token in einem POST-Request verwendet werden, um die angeforderten Daten zu erhalten. Für den Nutzer bedeutet dies in der Regel, den Token in ein dafür vorgesehenes Feld einzugeben, das von den Entwicklern bereitgestellt wird. Dies kann jedoch mit Variante B auch automatisiert werden.
WeiterlesenDer Post Request
Im Zusammenhang mit OAuth 2.0 bezeichnet der POST-Request die HTTP-Anfrage, die ein Client an den Autorisierungsserver sendet, um ein Access Token zu erhalten. Nachdem der Benutzer den Zugriff auf seine Daten autorisiert hat, wird der Client mit einem Autorisierungscode ausgestattet, den er in einem POST-Request zusammen mit anderen erforderlichen Informationen (wie Client-ID, Client-Secret und Redirect-URI) an den Token-Endpunkt des Servers sendet. Als Antwort erhält der Client ein Access Token, das ihm den Zugang zu den geschützten Ressourcen des Benutzers ermöglicht
[{«key»:»grant_type»,»value»:»authorization_code»,»type»:»text»},{«key»:»code»,»value»:»AUTHCODE»,»type»:»text»},{«key»:»redirect_uri»,»value»:»http://localhost»,»type»:»text»},{«key»:»client_id»,»value»:»ch.YourID»,»type»:»text»},{«key»:»client_secret»,»value»:»YourSecret»,»type»:»text»}]
POST https://oauth2.hin.ch/REST/v1/getoAuthToken
grant_type=authorization_code&
code=AUTH_CODE&
redirect_uri=REDIRECT_URI&
client_id=CLIENT_ID&
client_secret=CLIENT_SECRET
Der Access Token - Für CC & Grant Flow
Ein Access Token ist notwendig, um auf geschützte Daten oder Funktionen einer Anwendung zuzugreifen. Um dieses Token zu erhalten, muss zuerst der Auth Token über einen POST-Request an den Server gesendet werden. Der Auth Token dient dabei als Authentifizierung, dass der Nutzer oder die Anwendung berechtigt ist, ein Access Token zu erhalten. Nach dem Absenden des POST-Requests gibt der Server eine Antwort zurück, die das Access Token enthält.
Mit diesem Access Token kann nun ein GET-Request an die gewünschte Anwendung oder API gesendet werden. In diesem Request wird das Access Token als Nachweis für den Zugriff auf die geschützten Ressourcen übermittelt. Die Anwendung prüft das Access Token und, wenn es gültig ist, gibt sie eine Antwort mit den angeforderten Daten oder Informationen zurück. Das Access Token ist also ein Schlüssel, der den sicheren und autorisierten Zugriff auf die Ressourcen einer Anwendung ermöglicht.
Es ist wichtig zu beachten, dass Access Tokens in der Regel nur für eine begrenzte Zeit gültig sind, weshalb regelmässige Erneuerungen erforderlich sein können, um weiterhin auf die geschützten Daten zugreifen zu können.
Der Bezug des Client_Secret für die Curl Anfrage
Beim Bezug des Access Tokens muss definiert werden, für welche TokenGruppe das Token gültig sein soll und das Client_Secret muss auf apps.hin.ch geholt werden, im Gegensatz zum Grant Flow, welches HIN definieren muss. Der Auth Token wird wie bei Variante A über apps.hin.ch geholt. Der Reiter erscheint erst wenn Initial eine fehlerhafter Request gesendet wird, also mit einem falschen Secret.
WeiterlesenZugriff auf HIN Geschützte Applikationen mit Access Token
Mit einem Access Token kann ein GET-Request an eine Anwendung oder API gesendet werden, um auf geschützte Daten zuzugreifen. Das Access Token wird dabei in der Anfrage übermittelt, um sicherzustellen, dass die Anfrage von einer autorisierten Quelle kommt. Sobald die Anwendung das Token überprüft hat, liefert sie die angeforderten Daten zurück, sofern das Token gültig ist. Das Access Token stellt also sicher, dass nur berechtigte Nutzer oder Anwendungen Zugriff auf die geschützten Informationen erhalten.
Die exakten Parameter muss der Applikationsanbieter angeben, hier sind nur Hinweise, die wir geben können: Zugriff mit Access Token via Curl
curl –header ‘Authorization: Bearer <Access Token>’ https://<oauth2.application.hin.ch> |
Beispiel anhand Covercard:
curl –location ‹https://oauth2.covercard.hin.ch/covercard/servlet/ch.ofac.ca.covercard.CaValidationHorizontale?type=XML&langue=3&carte=<krankenkassen_karten_nr>&ReturnType=42a› –header ‹Authorization: Bearer <covercard_Access Token>› |
Der Refresh Token
Ein Refresh Token wird verwendet, um den Zugriff auf eine Anwendung oder einen Dienst aufrechtzuerhalten, ohne dass der Benutzer sich immer wieder neu anmelden muss. Nachdem ein Access Token abgelaufen ist, kann das Refresh Token dazu genutzt werden, ein neues Access Token zu erhalten, ohne dass der Benutzer seine Anmeldedaten erneut eingeben muss. Dies sorgt für eine nahtlose Benutzererfahrung und gleichzeitig für eine erhöhte Sicherheit.
Damit der Zugriff dauerhaft aufrechterhalten werden kann, muss der Anwender einen Loop in seine Anwendung einbauen, der regelmässig überprüft, ob das Access Token abgelaufen ist. Wenn das der Fall ist, wird automatisch ein neuer Access Token mithilfe des Refresh Tokens angefordert. Der Anwender erhält das Refresh Token in der Antwort eines Authentifizierungsprozesses, und dieses Token kann dann für nachfolgende Anfragen verwendet werden.
Dieser Mechanismus stellt sicher, dass der Benutzer auch bei längeren Sitzungen nicht ständig aufgefordert wird, sich neu anzumelden, während gleichzeitig sichergestellt wird, dass die Verbindung zur Anwendung sicher bleibt.
Nachdem der Benutzer sich erfolgreich bei der Anwendung angemeldet hat, erhält der Client ein Access Token und ein Refresh Token. Das Access Token hat eine begrenzte Gültigkeitsdauer, während das Refresh Token länger gültig bleibt. Wenn das Access Token abläuft, sendet der Client einen POST-Request an den Token-Endpunkt des Autorisierungsservers. In diesem Request übermittelt der Client das Refresh Token sowie die Client-ID und das Client-Secret. Der Server prüft die Gültigkeit des Refresh Tokens und, wenn alles korrekt ist, stellt er ein neues Access Token aus. Dieses neue Token kann dann verwendet werden, um weiterhin auf die geschützten Ressourcen zuzugreifen, ohne dass der Benutzer sich erneut anmelden muss.
import
requests
import
time
def get_new_access_token(refresh_token):
url = "https://oauth2.hin.ch/REST/v1/OAuth/GetAccessToken"
Haben Sie noch Fragen?
Kontaktieren Sie uns, falls Ihre Frage nicht geklärt werden konnte.