Авторизация на одном домене и переход на другой домен с сохранением сеанса — это распространенная задача, особенно в сценариях Single Sign-On (SSO). Поскольку `localStorage` привязан к домену и не доступен между разными доменами, необходимо использовать другие методы. Один из подходов — использование токенов и серверной логики.
Вот как можно реализовать процесс:
1. **Централизованный сервер авторизации (Auth Server):**
- Разработайте отдельный сервер авторизации, который будет обрабатывать вход пользователей и выдавать токены (например, JWT - JSON Web Tokens).
- При успешной авторизации сервер создает токен, который может содержать идентификатор пользователя и другую информацию, а затем подписывает его секретным ключом.
2. **Передача токенов авторизации:**
- После того как пользователь авторизован на Auth Server, его браузер перенаправляется на целевой домен с включением токена в запросе, как правило, через URL-параметры.
3. **Чтение и сохранение токена:**
- Приложение на целевом домене извлекает токен из URL-параметров и выполняет его проверку (к примеру, отправляя запрос на Auth Server, который верифицирует подпись токена).
- После положительной верификации приложение может сохранить токен в `localStorage` целевого домена и использовать его для последующих запросов к API, который требует авторизации.
4. **Использование кук (cookies):**
- В некоторых случаях можно использовать куки, которые устанавливаются Auth Server с атрибутом `domain` со значением основного домена.
- Если у вас есть домены вида `subdomain.example.com` и `another.example.com`, установка куки с доменом `.example.com` позволит читать эту куку на любом поддомене. Однако подход с куками требует детального обдумывания с точки зрения безопасности (помните о флагах `Secure` и `HttpOnly`, а также `SameSite`).
5. **Перекрестные запросы (Cross-origin requests):**
- Используйте CORS (Cross-Origin Resource Sharing) на сервере, чтобы разрешить приложениям на разных доменах обмениваться данными.
6. **Web Storage Access API (для Safari и некоторых других браузеров):**
- Safari представил API доступа к области хранения (Storage Access API) для усиления приватности и позволяющее сторонним контентам запрашивать разрешение на доступ к своим данным в `localStorage`.
Пример перенаправления с токеном (passing token via URL):
```javascript
// Перенаправляем пользователя на целевой домен с JWT токеном
window.location.href = `https://anotherdomain.com/landing?token=${encodeURIComponent(jwtToken)}`;
```
На стороне целевого домена (разбор URL для получения токена и сохранение его в localStorage):
```javascript
function getParameterByName(name, url = window.location.href) {
name = name.replace(/[\[\]]/g, '\\$&');
const regex = new RegExp(`[?&]${name}(=([^&#]*)|&|#|$)`),
results = regex.exec(url);
if (!results) return null;
if (!results[2]) return '';
return decodeURIComponent(results[