{"id":157,"date":"2020-09-30T15:39:35","date_gmt":"2020-09-30T15:39:35","guid":{"rendered":"https:\/\/intern.quizu.de\/?p=157"},"modified":"2020-11-11T12:03:05","modified_gmt":"2020-11-11T12:03:05","slug":"riddle-sso","status":"publish","type":"post","link":"https:\/\/intern.quizu.de\/?p=157","title":{"rendered":"Riddle SSO"},"content":{"rendered":"\n<p>Unser neuer Riddle SSO Microservie &amp; Bundle wurde Ende September 2020 entwickelt und wird k\u00fcnftig alle internen Riddle-Apps mit einer sichereren Authentication versorgen. <br><br>Folgende Schritte laufen im Hintergrund ab:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>User greift auf Microservice zu &#8211; bspw Translator<\/li><li>User wird auf \/auth\/sso weitergeleitet, das wiederum auf unseren SSO Microservice weiterleitet (dev-ms \/ team .riddle.com\/sso)<\/li><li>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<\/li><li>Wenn alles soweit stimmt, kommt der Login-Screen (sofern nicht schon per Session eingeloggt)<\/li><li>Nach der Authentifizierung mit E-Mail &amp; Passwort kommt eine Best\u00e4tigungsseite &#8211; nach dem Druck auf Redirect ist man dann im jeweiligen Microservice angemeldet und die Rollen wurden \u00fcbergeben<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Einen neuen Microservice mit dem SSO verbinden<br><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Bundle per Composer installieren<\/h3>\n\n\n\n<p>Erst muss das private Github-Repository in die composer.json eingebunden werden.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\"repositories\": &#91;\n        {\n            \"type\":\"vcs\",\n            \"url\":\"git@github.com:riddle-com\/SSOBundle.git\"\n        }\n    ]<\/code><\/pre>\n\n\n\n<p>Dann per Console das Bundle installieren:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>composer require riddle\/sso-bundle<\/code><\/pre>\n\n\n\n<p>Momentan l\u00e4uft das Bundle auf Symfony 5.1 &#8211; Philipp Bescheid sagen falls es mal geupdated werden sollte \ud83d\ude42<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Authentication auf das SSO Bundle umstellen<\/h3>\n\n\n\n<p>In der <strong>config\/packages\/security.yaml<\/strong> muss grob folgendes stehen:<br>(Achtung: bei der access_control property k\u00f6nnte z.B. auch noch ^\/api vorhanden sein &#8211; das macht nichts kaputt, einfach stehen lassen)<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>security:\n    providers:\n        app_user_provider:\n            entity:\n                class: App\\Entity\\User\n                property: email\n    firewalls:\n        dev:\n            pattern: ^\/(_(profiler|wdt)|css|images|js)\/\n            security: false\n        main:\n            anonymous: true\n            lazy: true\n            form_login:\n                login_path: ssoBundle_auth_sso\n            logout:\n                path: app_logout\n                target: ssoBundle_auth_sso_logout\n\n    access_control:\n        - { path: ^\/auth\/sso\/*, roles: IS_AUTHENTICATED_ANONYMOUSLY }\n        - { path: ^\/logout, roles: IS_AUTHENTICATED_ANONYMOUSLY }\n        - { path: ^\/, roles: IS_AUTHENTICATED_REMEMBERED }\n<\/code><\/pre>\n\n\n\n<p>Es ist kein extra &#8218;make:auth&#8216; oder \u00c4hnliches von Symfony n\u00f6tig &#8211; lediglich eine User-Entity, die man sp\u00e4ter auch per Config individuell setzen kann. <\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Routes hinzuf\u00fcgen<\/h3>\n\n\n\n<p>In der <strong>config\/routes.yaml<\/strong> muss folgendes hinzugef\u00fcgt werden:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>riddle_sso:\n    resource: '@RiddleSSOBundle\/Controller\/'\n    type: annotation\n\napp_logout:\n    path: \/logout\n    methods: GET<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Twig-View-path hinzuf\u00fcgen (v 1.1)<\/h3>\n\n\n\n<p>Das zur config\/packages\/twig.yaml hinzuf\u00fcgen:<br><br><strong>NOTE:<\/strong> Man kann auch das Base-Layout ab\u00e4ndern, das die Views benutzen. Daf\u00fcr einfach in der .env &#8222;<strong>SSO_LOGOUT_BASE<\/strong>&#8220; anpassen (default: &#8222;base.html.twig&#8220;).<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>twig:\n    paths:\n        '%kernel.project_dir%\/vendor\/riddle\/sso-bundle\/src\/Resources\/views': RiddleSSOBundle<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Die .env.local anpassen<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>SSO_ENABLED=1\nSSO_APP_NAME=translator\nSSO_BASE_URL=https:dev-ms.riddle.com\/sso\nSSO_SUCCESS_REDIRECT=index\nSSO_USER_CLASS=App\\Entity\\User\nSSO_LOGOUT_BASE=base.html.twig<\/code><\/pre>\n\n\n\n<p>Erkl\u00e4rungen zu den einzelnen Config Values:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>private $envVariables = &#91;\n        'ENABLED', \/\/ boolean that states if SSO is enabled\/disabled\n        'APP_NAME', \/\/ the name of the app, e.g. Monika, Translator, ...\n        'SUCCESS_REDIRECT', \/\/ the route that the user should get redirected to on SSO success\n        'BASE_URL', \/\/ Base URL of the SSO microservice\n        'USER_CLASS' \/\/ full class name of the User Entity, e.g. App\\Entity\\User\n    ];<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">In die SSO Datenbank einf\u00fcgen<\/h3>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"791\" height=\"121\" src=\"https:\/\/intern.quizu.de\/wp-content\/uploads\/2020\/09\/Screenshot-2020-09-30-at-17.37.05.png\" alt=\"\" class=\"wp-image-158\" srcset=\"https:\/\/intern.quizu.de\/wp-content\/uploads\/2020\/09\/Screenshot-2020-09-30-at-17.37.05.png 791w, https:\/\/intern.quizu.de\/wp-content\/uploads\/2020\/09\/Screenshot-2020-09-30-at-17.37.05-300x46.png 300w, https:\/\/intern.quizu.de\/wp-content\/uploads\/2020\/09\/Screenshot-2020-09-30-at-17.37.05-768x117.png 768w\" sizes=\"auto, (max-width: 791px) 100vw, 791px\" \/><figcaption>Hier zwei Beispiele<\/figcaption><\/figure>\n\n\n\n<p>Die Spalte &#8217;slug&#8216; muss mit APP_NAME aus der Config \u00fcbereinstimmen. Die Spalte &#8217;name&#8216; ist der Name, der im &#8222;Confirm&#8220; Bildschirm und auch allgemein selbst auf dem SSO Microservice angezeigt wird:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"982\" height=\"200\" src=\"https:\/\/intern.quizu.de\/wp-content\/uploads\/2020\/09\/Screenshot-2020-09-30-at-17.38.16.png\" alt=\"\" class=\"wp-image-159\" srcset=\"https:\/\/intern.quizu.de\/wp-content\/uploads\/2020\/09\/Screenshot-2020-09-30-at-17.38.16.png 982w, https:\/\/intern.quizu.de\/wp-content\/uploads\/2020\/09\/Screenshot-2020-09-30-at-17.38.16-300x61.png 300w, https:\/\/intern.quizu.de\/wp-content\/uploads\/2020\/09\/Screenshot-2020-09-30-at-17.38.16-768x156.png 768w\" sizes=\"auto, (max-width: 982px) 100vw, 982px\" \/><figcaption>Siehe &#8222;Riddle DEV Translator&#8220;<\/figcaption><\/figure>\n\n\n\n<p>Die Spalte &#8218;callback&#8216; ist quasi immer die Base URL des Microservices plus &#8218;\/auth\/sso\/callback&#8216;. Wenn falsch gesetzt, meckert aber auch der SSO Microservice \ud83d\ude42<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Unser neuer Riddle SSO Microservie &amp; Bundle wurde Ende September 2020 entwickelt und wird k\u00fcnftig alle internen Riddle-Apps mit einer sichereren Authentication versorgen. Folgende Schritte&#8230;<\/p>\n<div class=\"more-link-wrapper\"><a class=\"more-link\" href=\"https:\/\/intern.quizu.de\/?p=157\">Weiterlesen<span class=\"screen-reader-text\">Riddle SSO<\/span><\/a><\/div>\n","protected":false},"author":5,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[],"class_list":["post-157","post","type-post","status-publish","format-standard","hentry","category-development","entry"],"_links":{"self":[{"href":"https:\/\/intern.quizu.de\/index.php?rest_route=\/wp\/v2\/posts\/157","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/intern.quizu.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/intern.quizu.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/intern.quizu.de\/index.php?rest_route=\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/intern.quizu.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=157"}],"version-history":[{"count":4,"href":"https:\/\/intern.quizu.de\/index.php?rest_route=\/wp\/v2\/posts\/157\/revisions"}],"predecessor-version":[{"id":163,"href":"https:\/\/intern.quizu.de\/index.php?rest_route=\/wp\/v2\/posts\/157\/revisions\/163"}],"wp:attachment":[{"href":"https:\/\/intern.quizu.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=157"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/intern.quizu.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=157"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/intern.quizu.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=157"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}