사용자 인증 프로세스가 내장되어 있지 않은 웹 애플리케이션(Kibana 대시보드)을 보호하려고 합니다. WordPress 사이트에 로그인한 사용자만 재인증 메시지를 표시하지 않고 웹 애플리케이션 URL을 열 수 있도록 이 웹 애플리케이션을 보호하고 싶습니다.
환경:
Centos 7의 Apache 2.4
나는 내가 익숙한 모든 영역을 광범위하게 조사했습니다. 인증을 위해 로컬 Perl 스크립트를 사용하는 Apache mod_authnz_external을 사용해 보았습니다. 이것은 내가 원하는 것을 수행하지만 거래 차단기인 로그인 프롬프트를 피할 수 없습니다.
인증을 확인하기 위해 Kibana URL을 로컬 Perl 스크립트로 리디렉션하기 위해 mod_rewrite 및 rewriteMap을 사용해 보았습니다. 이것은 작동하지만 원래 재작성 일치를 트리거하지 않고 사용자를 리디렉션된 URL로 다시 전달하는 방법을 알 수 없습니다......
Kibana에 대한 역방향 프록시를 설정했고 이를 사용하여 액세스를 제어할 수 있지만 기본 인증 로그인 프롬프트를 트리거하지 않고 Apache 프록시를 사용하여 사용자를 인증하는 방법이 있는지 알 수 없습니다.
나는 이 문제를 Apache를 사용하여 해결하는 것을 선호하기 때문에 이 질문에 Apache 2.4로 태그를 지정했지만 다른 아이디어도 열려 있습니다.
귀하의 의견에 미리 감사드립니다.
답변1
언제든지 약간의 PHP 마법을 사용하여 이를 실현할 수 있습니다. 이렇게 하면 WordPress의 인증 기능에 직접 연결하고 WordPress가 업데이트될 때 최신 상태를 유지할 수 있습니다.
누군가 로그인했는지 확인하는 데 필요한 기능은 여기에 설명되어 있습니다.https://developer.wordpress.org/reference/functions/is_user_logged_in/
이것은 테스트되지 않았거나 기능하지 않는 코드이므로 조정이 필요하지만 요점은 다음과 같습니다.
require($_SERVER['DOCUMENT_ROOT'].'/wp-load.php');
if (is_user_logged_in()) {
$url = $_REQUEST['url'];
$transformedBackendURL = changeHostnameandStuff($url);
$content = file_get_contents($url);
// parse all links and forms actions and redirect back to this script
$content = preg_replace("/some-smart-regex-here/i", "$1 or $2 smart replaces", $content);
echo $content;
} else {
header('HTTP/1.0 403 Forbidden');
echo 'You are forbidden!';
}
답변2
어쩌면 사용자 이름과 IP 등이 포함된 URL로 암호화된 키를 보낸 다음 이를 해독하고 컬을 사용하여 다른 서버의 사용자 정보를 확인할 수 있습니다. 이것이 당신에게 몇 가지 아이디어를 줄 수 있기를 바랍니다.