Giter Club home page Giter Club logo

keycloak's Introduction

Keycloak

Dieses Repository beinhaltet den Code für das im Rahmen des Praxisprojekts behandelte Thema "Integration von Keycloak als OpenID-Provider"

Voraussetzungen

  • Docker ist installiert

  • Node.js (18.15.0 oder höher)

  • Folgendes Mapping in der Host-Datei auf dem Rechner wurde vollzogen:

     127.0.0.1 api.local
     127.0.0.1 webapp.local
    

Anmerkung: Der Pfad zur Host-Datei ist vom jeweiligen Betriebssystem abhängig. Bei Windows: C:\Windows\System32\drivers\etc. Damit werden Probleme beim Ausstellen eines Access Token vermieden.

Durchführung

  1. Klonen des Repository

    git clone https://github.com/nickklssn/keycloak.git
  2. Installieren der Abhängigkeiten

    cd .\keycloak\api
    npm i
    cd .\keycloak
    npm i
  3. Docker-Container für Keycloak und Datenbank erstellen (im Root-Verzeichnis)

    docker compose up
  4. Starten der Web-App und der API

    cd .\keycloak\api
    npm start
    cd .\keycloak
    npm start

Konfiguration in Keycloak

Durch die Erstellung der Docker-Container ist Keycloak unter localhost:8080 aufrufbar. Benutzername und Passwort für die Admin-Konsole sind jeweils admin .

  1. Erstellung eines Realm
    Schaltfläche oben links anklicken und dann auf "Create Realm" gehen. Beliebigen Namen auswählen und auf "Create" klicken.

  2. Erstellung eines Clients
    Links im Auswahlmenü auf Clients und anschließend "Create Client" klicken. "Client type auf "OpenID Connect" setzen und dem Client eine "Client ID" vergeben. Die "Client authentication" auf "On" setzen. Anschließend für die "Login settings" folgende URLs bzw. URIs setzen:

     Root URL: http://webapp.local:3000
     Home URL: http://webapp.local:3000
     Valid redirect URIs: /login/cb
     Valid post logout redirect URIs: /*
  3. Erstellung von Benutzern
    Links im Auswahlmenü auf User und anschließend "Add user" klicken. Dem Benutzer einen "Username" und für die
    Unterscheidung einen "Firstname" und "Lastname" vergeben. Anschließend unter dem Reiter "Credentials" ein neues nicht temporäres Passwort vergeben.

  4. Erstellung von Benutzerrollen
    Links im Auswahlmenü auf Realm roles und anschließend "Create role" klicken. Jeweils eine Rolle für "app-user" und "app- admin" erstellen.

  5. Zuweisung der Benutzerrollen
    Links im Auswahlmenü auf Users und einen Benutzer anklicken, dem eine Rolle zugewiesen werden soll. Anschließend unter dem Reiter "Role mapping" und danach "Assign role" dem Benutzer die gewünschte Rolle zuweisen.

  6. Lebensdauer des Access Token anpassen
    Links im Auswahlmenü auf Realm settings und anschließend auf Tokens klicken. Unter dem Punkt "Access tokens" die Option "Access Token Lifespan" auf 1 Minute setzen. Dies erlaubt ein schnelleres Erneuern des Access Token.

Umgebungsvariablen

Um Variablen, wie bspw. das Client secret, zu schützen, wurde für das Projekt eine .env-Datei angelegt. Im Folgenden ein Template für diese Datei, die im Root-Verzeichnis des Repositorys angelegt werden muss:

PORT = 3000
WELLKNOWN_CONFIG = "http://localhost:8080/realms/YOUR-REALM/.well-known/openid-configuration"
CLIENT_ID = "YOUR-CLIENT_ID"
CLIENT_SECRET = "YOUR-CLIENT_SECRET"
REDIRECT_URI = "http://webapp.local:3000/login/cb"
RESPONSE_TYPES = 'code'
ID_TOKEN_SIGNING_ALG_VALUES_SUPPORTED = "RS256"

Anmerkung: Die in Großbuchstaben hinterlegten Bezeichnungen durch die eigenen Bezeichnungen ersetzen.

keycloak's People

Contributors

nickklssn avatar

Watchers

 avatar

keycloak's Issues

Invalid_grant (Invalid refresh token)

Der letzte Commit # 127c791 sorgte dafür, dass die Refresh token Rotation nicht mehr funktioniert. Es lassen sich fetch requests an die API senden, aber sobald der access token abgelaufen ist, kann dieser nicht mehr erneuert werden.

Token Validation always says "token is valid"

Die Middleware der API validiert den Token nicht richtig. Immer wird geprüft und festgestellt, dass der Token valide ist. Der Token im Cookie ist dann aber leer und die dazugehörige Session des Users in Keycloak ist auch beendet.

Der dazugehörige Commit: # 2d5b94f

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.