# 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
```