# auth in education-services.ru ### Общая авторизационная кука на все поддомены education-services.ru ```sequence Note over "some.education-services.ru (nginx)": No auth cookie "some.education-services.ru (nginx)"->"practicum.yandex.ru/auth": Redirect to practicum site Note over "practicum.yandex.ru/auth": Issue auth token \n with user_id and courses meta "practicum.yandex.ru/auth"->"auth.education-services.ru": POST auth token Note over "auth.education-services.ru": Check auth token \n set auth cookie on .education-services.ru \n "auth.education-services.ru"->"some.education-services.ru (nginx)": Redirect user back with auth cookie Note over "some.education-services.ru (nginx)": Check auth cookie\nand courses meta "some.education-services.ru (nginx)"->"internal service": Proxypass user to internal edu service ``` ### Авторизация в VPN и Keycloak В первом приближении просто накрываем Keycloak nginx с проверкой auth куки, внутри заводим пользователей для vpn и облака в формате student_<practicum_user_id> ```sequence "tailscale (vpn client)"->"headscale (vpn server)": Connect to vpn server "headscale (vpn server)"->"sso.education-services.ru (nginx)": Webauth client via OIDC provider Note over "sso.education-services.ru (nginx)": Check edu auth cookie\nand active course meta "sso.education-services.ru (nginx)"->"internal keycloak": Proxypass user browser to internal keycloak service "internal keycloak"->"user": Request login password "user"->"internal keycloak": Credentials Note over "internal keycloak": Check user login pass \nand authorize vpn / cloud "internal keycloak"->"headscale (vpn server)": Authorize client to connect ``` В идеальном состоянии добавляем для Keyclock auth plugin, который проверяет auth куку и возвращает по ней обезличенную учетку student_<practicum_user_id> для впн и облака без необходимости заведения обезличенных пользователй на Keyclock, рассылки учетных данных и ввода их студентом: ```sequence "tailscale (vpn client)"->"headscale (vpn server)": Connect to vpn server "headscale (vpn server)"->"sso.education-services.ru (nginx)": Webauth client via OIDC provider Note over "sso.education-services.ru (nginx)": Check edu auth cookie\nand active course meta "sso.education-services.ru (nginx)"->"internal keycloak": Proxypass user browser to internal keycloak service "internal keycloak"->"practicum auth plugin": request current user Note over "practicum auth plugin": Check auth edu cookie and cource meta\nmake user student_<user_id> "practicum auth plugin"->"internal keycloak": return practicum user context "internal keycloak"->"headscale (vpn server)": Authorize client to connect ```