nginx разрешает доступ к местоположению, только если запрос поступил от cognito

#amazon-web-services #nginx #amazon-cognito

#amazon-web-services #nginx #amazon-cognito

Вопрос:

Я использую AWS Cognito для аутентификации и перенаправляю его на определенный путь на моем веб-сайте nginx

Я хочу, чтобы этот путь был доступен только в том случае, если запрос поступает после входа пользователя в систему через cognito.

Как мне заблокировать доступ к пути в nginx, если кто-то просто вводит этот путь в адресную строку?

Допустим, например, местоположение, которое я хочу заблокировать, является:

http://localhost:3010/firstPath/

В Chrome devtools я не вижу никакого реферера или чего-либо подобного в запросе:

 Request URL: http://localhost:3010/firstPath/?code=axxxxx-xxxx-xxx-9b18-df2832a401e9amp;state=N35vxxxxxJGnlJr5YEI5AVfFRPdbghFG

Request Method: GET

Status Code: 200 OK

Remote Address: 127.0.0.1:3010

Referrer Policy: strict-origin-when-cross-origin

Accept-Ranges: bytes

Connection: keep-alive

Content-Encoding: gzip

Content-Type: text/html; charset=UTF-8

Date: Thu, 28 Jan 2021 08:52:50 GMT

ETag: W/"868-KJFfIJ4iphNuyGJQRrz3NAqMbz4"

Transfer-Encoding: chunked

Vary: Accept-Encoding

X-Powered-By: Express

Accept: text/html,application/xhtml xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9

Accept-Encoding: gzip, deflate, br

Accept-Language: en-US,en;q=0.9

Cache-Control: no-cache

Connection: keep-alive

DNT: 1

Host: localhost:3010

Pragma: no-cache

Sec-Fetch-Dest: document

Sec-Fetch-Mode: navigate

Sec-Fetch-Site: cross-site

Sec-Fetch-User: ?1

Upgrade-Insecure-Requests: 1

User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36

code: axxxxx-xxxx-xxx-9b18-df2832a401e9

state: N35vxxxxxJGnlJr5Y
 

В nginx я могу блокировать запросы, которые не поступали из AWS ELB, на мой / путь проверки работоспособности, например:

   location /health {
set $block 1;
# Allow all the ELB health check agents.
if ($http_user_agent ~* '^ELB-HealthChecker/.*

}

Есть ли способ сделать подобное для этого пути на основе запроса, поступающего от aws cognito?


Комментарии:

1. Вы должны проверять заголовки в приложении. Devtools показывают заголовки, отправленные только вашим браузером, но по пути можно добавить больше заголовков. Также проверьте файлы cookie.

2. @anemyte есть идеи, как это сделать с помощью reactjs (или просто js)? Я видел здесь несколько тем об этом, но они, похоже, требуют перезагрузки страницы, но я не думаю, что это сработает

3. Заголовки запроса видны приложению, которое генерирует ответ. Вы не можете получить доступ к этим заголовкам после получения ответа.

) {
set $block 0;
access_log off;
}

# block invalid requests
if ($block = 1) {
return 444;
}

return 200;
add_header Content-Type text/plain;
}

Есть ли способ сделать подобное для этого пути на основе запроса, поступающего от aws cognito?

Комментарии:

1. Вы должны проверять заголовки в приложении. Devtools показывают заголовки, отправленные только вашим браузером, но по пути можно добавить больше заголовков. Также проверьте файлы cookie.

2. @anemyte есть идеи, как это сделать с помощью reactjs (или просто js)? Я видел здесь несколько тем об этом, но они, похоже, требуют перезагрузки страницы, но я не думаю, что это сработает

3. Заголовки запроса видны приложению, которое генерирует ответ. Вы не можете получить доступ к этим заголовкам после получения ответа.