#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. Заголовки запроса видны приложению, которое генерирует ответ. Вы не можете получить доступ к этим заголовкам после получения ответа.