Есть ли универсальный способ узнать, зарегистрирован ли пользователь (или имеет аутентификацию) на веб-сайте, который работает для всех (или, по крайней мере, для большинства веб-сайтов)? - PullRequest
0 голосов
/ 26 апреля 2020

Я работаю над расширением браузера (chrome и firefox), чтобы загружать файлы из поисковой системы базы данных (не совсем, но что-то похожее) для массовой загрузки всех наборов данных, выбранных пользователем. Проблема состоит в том, что эти наборы данных расположены на 6500 серверах вне поисковой системы, большинство из которых требуют входа в систему. До сих пор я пытался отслеживать изменения в сеансе cook ie, чтобы определить, когда запрашивать вход в систему. Однако этот код завершается ошибкой, когда пользователь уже вошел в систему, потому что в сеансе нет изменений ie и загрузка не инициирована. Может кто-нибудь предложить мне универсальный способ определить, вошел ли пользователь в систему или нет?

Это фрагмент кода, который я использую для проверки файлов cookie.


    const onLoggedIn = (getSingleLink, callback) => {

        let serverLink = getSingleLink();

        chrome.cookies.getAll({url:serverLink.split("/", 3).join("/") }, (cookies)=>{

            let baseLength = cookies.filter(cookie => cookie.session).length;

            if(
                baseLength >= cookies.filter(cookie => cookie.session).length ||
                cookies.some(cookie => (cookie.name.match(/_urs-gui_session/g)))
            ){

                const loginLink = serverLink.substring(0, serverLink.lastIndexOf("/"));
                loginWindow = window.open(loginLink, null, 'width=600,height=600');

                let loginInterval = setInterval(() =>{
                    chrome.cookies.getAll({url:serverLink.split("/", 3).join("/") }, (cookies)=>{
                        console.log(cookies);
                        if(
                            baseLength < cookies.filter(cookie => cookie.session).length &&
                            !cookies.some(cookie => (cookie.name.match(/_urs-gui_session/g)))
                        ){
                            loginWindow.close();
                            clearInterval(loginInterval);
                            callback();
                        }
                    })
                }, 500);

            }else{
                callback();
            }
        });

1 Ответ

1 голос
/ 26 апреля 2020

Нет, поскольку разные веб-сайты имеют разные способы идентификации пользователя и его сеанса, и эту информацию можно скрыть от веб-страницы, например go, это невозможно обработать во всех случаях:

Некоторые веб-сайты будут использовать систему состояний сеансов своей серверной платформы и хранить на стороне сервера пользовательских требований безопасности, на которые ссылается их идентификатор сеанса (хранится в Cook ie), но все пользователи, прошедшие проверку подлинности и не прошедшие проверку подлинности, все иметь сессионные идентификаторы, поэтому в этом случае невозможно определить (за исключением, конечно, если на странице есть ссылка «Вход» или «Выход» или кнопка, отображаемая на странице).

Другие веб-сайты, такие как SPA , могут использовать OAuth / OID C и хранить их access_token в localStorage, а не в cook ie, и они добавят его к запросам XHR / fetch в качестве дополнительного заголовка HTTP.

А в средах локальной сети веб-сервер может использовать NTLM / Kerberos для защиты себя, который может быть интегрирован в клиентскую операционную систему (например, NTLM в IIS в Windows Active Direc. локальная локальная сеть с Inte rnet Explorer) - в этом случае невозможно не войти в систему.

...