Zum Inhalt springen

Riddle SSO

Unser neuer Riddle SSO Microservie & Bundle wurde Ende September 2020 entwickelt und wird künftig alle internen Riddle-Apps mit einer sichereren Authentication versorgen.

Folgende Schritte laufen im Hintergrund ab:

  • User greift auf Microservice zu – bspw Translator
  • User wird auf /auth/sso weitergeleitet, das wiederum auf unseren SSO Microservice weiterleitet (dev-ms / team .riddle.com/sso)
  • Der SSO Microservice speichert die Request Params in der Session, checkt, ob die Application mit dem Name existiert (bspw translator) und checkt, ob der gesendete Callback valide ist
  • Wenn alles soweit stimmt, kommt der Login-Screen (sofern nicht schon per Session eingeloggt)
  • Nach der Authentifizierung mit E-Mail & Passwort kommt eine Bestätigungsseite – nach dem Druck auf Redirect ist man dann im jeweiligen Microservice angemeldet und die Rollen wurden übergeben

Einen neuen Microservice mit dem SSO verbinden

Bundle per Composer installieren

Erst muss das private Github-Repository in die composer.json eingebunden werden.

"repositories": [
        {
            "type":"vcs",
            "url":"git@github.com:riddle-com/SSOBundle.git"
        }
    ]

Dann per Console das Bundle installieren:

composer require riddle/sso-bundle

Momentan läuft das Bundle auf Symfony 5.1 – Philipp Bescheid sagen falls es mal geupdated werden sollte 🙂

Authentication auf das SSO Bundle umstellen

In der config/packages/security.yaml muss grob folgendes stehen:
(Achtung: bei der access_control property könnte z.B. auch noch ^/api vorhanden sein – das macht nichts kaputt, einfach stehen lassen)

security:
    providers:
        app_user_provider:
            entity:
                class: App\Entity\User
                property: email
    firewalls:
        dev:
            pattern: ^/(_(profiler|wdt)|css|images|js)/
            security: false
        main:
            anonymous: true
            lazy: true
            form_login:
                login_path: ssoBundle_auth_sso
            logout:
                path: app_logout
                target: ssoBundle_auth_sso_logout

    access_control:
        - { path: ^/auth/sso/*, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/logout, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/, roles: IS_AUTHENTICATED_REMEMBERED }

Es ist kein extra ‚make:auth‘ oder Ähnliches von Symfony nötig – lediglich eine User-Entity, die man später auch per Config individuell setzen kann.

Routes hinzufügen

In der config/routes.yaml muss folgendes hinzugefügt werden:

riddle_sso:
    resource: '@RiddleSSOBundle/Controller/'
    type: annotation

app_logout:
    path: /logout
    methods: GET

Twig-View-path hinzufügen (v 1.1)

Das zur config/packages/twig.yaml hinzufügen:

NOTE: Man kann auch das Base-Layout abändern, das die Views benutzen. Dafür einfach in der .env „SSO_LOGOUT_BASE“ anpassen (default: „base.html.twig“).

twig:
    paths:
        '%kernel.project_dir%/vendor/riddle/sso-bundle/src/Resources/views': RiddleSSOBundle

Die .env.local anpassen

SSO_ENABLED=1
SSO_APP_NAME=translator
SSO_BASE_URL=https:dev-ms.riddle.com/sso
SSO_SUCCESS_REDIRECT=index
SSO_USER_CLASS=App\Entity\User
SSO_LOGOUT_BASE=base.html.twig

Erklärungen zu den einzelnen Config Values:

private $envVariables = [
        'ENABLED', // boolean that states if SSO is enabled/disabled
        'APP_NAME', // the name of the app, e.g. Monika, Translator, ...
        'SUCCESS_REDIRECT', // the route that the user should get redirected to on SSO success
        'BASE_URL', // Base URL of the SSO microservice
        'USER_CLASS' // full class name of the User Entity, e.g. App\Entity\User
    ];

In die SSO Datenbank einfügen

Hier zwei Beispiele

Die Spalte ’slug‘ muss mit APP_NAME aus der Config übereinstimmen. Die Spalte ’name‘ ist der Name, der im „Confirm“ Bildschirm und auch allgemein selbst auf dem SSO Microservice angezeigt wird:

Siehe „Riddle DEV Translator“

Die Spalte ‚callback‘ ist quasi immer die Base URL des Microservices plus ‚/auth/sso/callback‘. Wenn falsch gesetzt, meckert aber auch der SSO Microservice 🙂