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

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:

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