Перекрестный ресурс совместного использования ресурсов с учетными данными

У меня есть обычная форма проверки подлинности на нескольких поддоменах (example.com, blog.example.com и app.example.com). Форма входа должна отправить эти данные на example.com независимо от того, где она показана, поэтому я подумал об использовании CORS, но это:

header("Access-Control-Allow-Origin: http://example.com http://blog.example.com http://app.example.com")

не работает

Итак, я подумал о том, чтобы сделать следующее, и проверить заголовок Origin вручную на стороне сервера и разрешить Access-Control-Allow-Origin: *, чтобы запросы могли быть сделаны, но, к сожалению, это появляется в MDN

Важное примечание: при ответе на доверенный запрос сервер должен указать домен и не может использовать wild carding.

Есть ли способ заставить мой запрос работать через несколько доменов и все еще отправлять учетные данные с помощью CORS?

Ответ 1

Две мысли:

1), вы также включаете заголовок "Access-Control-Allow-Credentials: true"? Это необходимо для передачи учетных данных cookie (и соответствующий клиент XHR должен установить .withCredentials = true)

2) Пробовали ли вы предложение по вашей ссылке и только укажите источник для текущего запроса. Например, если запрос приходит с заголовком "Происхождение: http://blog.example.com", вы должны ответить "Access-Control-Allow-Origin: http://blog.example.com", а не список истоков. Это требует немного дополнительной работы по реализации вашей серверной части.

3) Еще одна мысль: вы указываете, что у вас есть одна форма входа, которая должна использоваться разными доменами. Ну, если это стандартная форма HTML, вы можете делать регулярные сообщения из разных доменов. Вам не нужно использовать CORS. Просто установите свойство action для формы на url, который вы хотите опубликовать. Например:

<form name="login" action="http://login.example.com/doLogin">

Ответ 2

// cross domain
header("Access-Control-Allow-Origin: ".$_SERVER['HTTP_ORIGIN']);
header('Access-Control-Allow-Credentials: true');