차량 모니터 PWA 진입 인증 정리
This commit is contained in:
@@ -120,6 +120,7 @@ Worker 교체나 예외 종료로 `processing`, `ui_timeout_pending` 상태가
|
|||||||
- 차량 API는 API token 또는 허용 IP 정책을 사용합니다.
|
- 차량 API는 API token 또는 허용 IP 정책을 사용합니다.
|
||||||
- 차량 모니터 화면과 `monitor.php?mode=ajax`, `monitor.php?mode=usage`는 런처 공통 인증 쿠키 또는 사이트 관리자 세션이 유효할 때만 응답합니다.
|
- 차량 모니터 화면과 `monitor.php?mode=ajax`, `monitor.php?mode=usage`는 런처 공통 인증 쿠키 또는 사이트 관리자 세션이 유효할 때만 응답합니다.
|
||||||
- 공통 암호로 로그인한 일반 인증은 30분 유지하고, 사이트 관리자 세션이 확인되면 관리자 장기 쿠키를 발급해 PWA에서 반복 인증이 뜨는 일을 줄입니다.
|
- 공통 암호로 로그인한 일반 인증은 30분 유지하고, 사이트 관리자 세션이 확인되면 관리자 장기 쿠키를 발급해 PWA에서 반복 인증이 뜨는 일을 줄입니다.
|
||||||
|
- PWA로 설치한 차량 모니터는 manifest 시작 URL `/car/monitor.php?pwa=1`로 진입합니다. 이 요청은 공통 인증 쿠키를 한 번 발급한 뒤 `/car/monitor.php`로 되돌아가므로 설치형 앱 진입 때 반복 PIN 화면이 뜨는 일을 줄입니다.
|
||||||
- 런처 공통 인증은 우선 공통 인증 모듈로 직접 확인합니다. 공통 모듈을 사용할 수 없는 경우에만 `https://chaegeon.com/custom/launcher/api.php?session=1` 응답으로 확인합니다.
|
- 런처 공통 인증은 우선 공통 인증 모듈로 직접 확인합니다. 공통 모듈을 사용할 수 없는 경우에만 `https://chaegeon.com/custom/launcher/api.php?session=1` 응답으로 확인합니다.
|
||||||
- 브라우저로 직접 접근했는데 인증이 없으면 채건닷컴으로 보내지 않고 `/custom/common/js/auth-pin.js`의 4자리 숫자 PIN 화면을 표시합니다. 차량 모니터는 `seo.chaegeon.com`에서 동작하므로 화면 입력값을 `monitor.php?mode=auth-login`으로 보내 공통 암호를 검증하고, 인증이 끝나면 차량 모니터를 다시 불러옵니다.
|
- 브라우저로 직접 접근했는데 인증이 없으면 채건닷컴으로 보내지 않고 `/custom/common/js/auth-pin.js`의 4자리 숫자 PIN 화면을 표시합니다. 차량 모니터는 `seo.chaegeon.com`에서 동작하므로 화면 입력값을 `monitor.php?mode=auth-login`으로 보내 공통 암호를 검증하고, 인증이 끝나면 차량 모니터를 다시 불러옵니다.
|
||||||
- 차량 모니터의 브라우저 화면 인증은 런처/나의 찾기와 같은 공통 쿠키를 사용하지만, 차량 단말이 호출하는 `api.php` 인증은 API token과 허용 IP 정책을 사용하는 별도 경로입니다.
|
- 차량 모니터의 브라우저 화면 인증은 런처/나의 찾기와 같은 공통 쿠키를 사용하지만, 차량 단말이 호출하는 `api.php` 인증은 API token과 허용 IP 정책을 사용하는 별도 경로입니다.
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
"name": "Car Monitor",
|
"name": "Car Monitor",
|
||||||
"short_name": "Car Monitor",
|
"short_name": "Car Monitor",
|
||||||
"description": "Vehicle status monitor",
|
"description": "Vehicle status monitor",
|
||||||
"start_url": "/car/monitor.php",
|
"start_url": "/car/monitor.php?pwa=1",
|
||||||
"scope": "/car/",
|
"scope": "/car/",
|
||||||
"display": "standalone",
|
"display": "standalone",
|
||||||
"orientation": "portrait",
|
"orientation": "portrait",
|
||||||
|
|||||||
+27
@@ -982,6 +982,31 @@ window.addEventListener('DOMContentLoaded', function () {
|
|||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function car_monitor_issue_pwa_cookie_if_requested(): void
|
||||||
|
{
|
||||||
|
if (($_GET['pwa'] ?? '') !== '1') {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$fetchDest = strtolower((string)($_SERVER['HTTP_SEC_FETCH_DEST'] ?? ''));
|
||||||
|
if ($fetchDest !== '' && $fetchDest !== 'document') {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$commonAuth = '/mnt/synology-web/custom/common/auth.php';
|
||||||
|
if (!is_readable($commonAuth)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
require_once $commonAuth;
|
||||||
|
if (function_exists('custom_issue_auth_cookie')) {
|
||||||
|
custom_issue_auth_cookie(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
header('Location: /car/monitor.php', true, 302);
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
function car_monitor_auth_api(): void
|
function car_monitor_auth_api(): void
|
||||||
{
|
{
|
||||||
$commonAuth = '/mnt/synology-web/custom/common/auth.php';
|
$commonAuth = '/mnt/synology-web/custom/common/auth.php';
|
||||||
@@ -1016,6 +1041,8 @@ if (isset($_GET['mode']) && $_GET['mode'] === 'auth-login') {
|
|||||||
car_monitor_auth_api();
|
car_monitor_auth_api();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
car_monitor_issue_pwa_cookie_if_requested();
|
||||||
|
|
||||||
if (isset($_GET['mode']) && $_GET['mode'] === 'ajax') {
|
if (isset($_GET['mode']) && $_GET['mode'] === 'ajax') {
|
||||||
car_monitor_require_access(true);
|
car_monitor_require_access(true);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user