Oauth Integration

Hi, ich versuche eine oauth integration hinzukriegen, habs erst mal mit demo.hitobito.com versuncht, aber wenn ich den token anfrage (das permission granten funktionniert gut) bekomme ich immer ein „500 Internal server error“. Um auch logs von der server seite zu haben, habe ich mal die container selber hochgeschoben, und hier ist die fehler meldung die ich bekomme.

  Doorkeeper::OpenidConnect::Request Load (0.6ms)  SELECT `oauth_openid_requests`.* FROM oauth_openid_requests` WHERE `oauth_openid_requests`.`access_grant_id` = 5 LIMIT 1
  Person Load (0.7ms)  SELECT `people`.* FROM `people` WHERE `people`.`id` = 221 LIMIT 1
    ↳ config/initializers/doorkeeper_openid_connect.rb:18:in `block (2 levels) in <main>'
    CACHE Person Load (0.0ms)  SELECT `people`.* FROM `people` WHERE `people`.`id` = 221 LIMIT 1  [["id", 221], ["LIMIT", 1]]
    ↳ config/initializers/doorkeeper_openid_connect.rb:18:in `block (2 levels) in <main>'
  Completed 500 Internal Server Error in 122ms (ActiveRecord: 73.3ms | Allocations: 53743)

  no implicit conversion of nil into String excluded from capture: DSN not set

  TypeError (no implicit conversion of nil into String):

Bin leider kein ruby experte und weiss nicht geneu wo ich weitersuchen soll? hat jemand eine idee?

Hallo mensoif

Ich sehe das Problem, wir haben bisher keinen Private Key zum signieren der OIDC Tokens auf der Demoumgebung hinterlegt. Wir können das nächste Woche beheben.
Lokal in deinen Containern kannst du in der Zwischenzeit z.B. die Environment Variable JWT_SIGNING_KEY mit einem RSA private key befüllen (den Teil von -----BEGIN PRIVATE KEY----- bis und mit -----END PRIVATE KEY-----). Du kannst einen solchen Key mit openssl generieren: https://en.wikibooks.org/wiki/Cryptography/Generate_a_keypair_using_OpenSSL

Möglicherweise werden wir einen solchen Key in Zukunft auch gleich im hitobito development Docker setup einbauen, sodass das mit den Containern out of the box funktionieren könnte. Ich bin aber noch nicht sicher ob OIDC ohne https überhaupt möglich ist.

Hi, super danke für den hint, ich werde das diese Wochenende ausprobieren.

weisst du vielleicht unter welcher Form ich den key unterlegen muss?

In app/hitobito/config/initializers/doorkeeper_openid_connect.rb steht:

    # $>openssl genrsa 2048
    #   signing_key <<-EOL
    # -----BEGIN RSA PRIVATE KEY-----
    # ....
    # -----END RSA PRIVATE KEY-----
    # EOL

ich habe daher ein 2048 RSA schlüssel generiert und unter verschiedener Form (Single quote, double quotes, multiline, single line mit \n am ende) im docker/rails.env oder direct im docker-compose.yml eingetragen.

sudo docker exec pbs_rails_1 bash -c 'echo "$JWT_SIGNING_KEY"'

zeigt mir den key an aber ich bekomme immer ein Fehler.

Hallo mensoif

Bei mir lokal hat es funktioniert wenn ich es folgendermassen im docker-compose.yml eintrage:

  environment:
    JWT_SIGNING_KEY: |
      -----BEGIN PRIVATE KEY-----
      ....
      -----END PRIVATE KEY-----

Beachte dabei das | Symbol welches in YML für Multiline-Strings verwendet werden kann.

Ausserdem haben wir nun einen Key auf der Demoumgebung eingerichtet, und auch dort konnte ich inzwischen erfolgreich testen. Probiers doch mal aus.

Vielen dank für den Schlüssel auf der demo umgebung, es funktioniert 1A.