Microsoft авторизация с новой вкладкой - PullRequest
0 голосов
/ 16 января 2019

Мне нужно реализовать функцию входа в Microsoft с помощью новой вкладки.

В настоящее время наш процесс входа в систему работает с Microsoft таким образом, который не совсем соответствует нашим потребностям. Пользователь нажимает кнопку входа в систему, перенаправляется на страницу входа в Microsoft, вводит свои данные и перенаправляется обратно на нашу страницу входа. Все это происходит на одной вкладке. Ниже приведен пример кода:

authenticateOffice(finallyCallback?: () => void): void {
    finallyCallback = finallyCallback || (() => {
    });

    let currentUrl = location.href;
    this.redirectLocationUrl = currentUrl.substr(0, currentUrl.indexOf('#'));
    let url = "https://login.microsoftonline.com/".concat(this.office365Domain, "/oauth2/v2.0/authorize?client_id=", this.clientId,
        "&response_type=id_token&redirect_uri=", this.redirectLocationUrl, "&response_mode=fragment&scope=openid profile&state=12345&nonce=678910");

     window.location.href = url;
}

Довольно просто и ничего сложного.

Что нам нужно сделать с точки зрения непрофессионала:
1. Откройте новую вкладку, нажав кнопку входа
2. Пользователь вводит свою информацию на странице входа Microsoft
3. После авторизации вкладка автоматически закрывается
4. Затем наша страница входа получает «id_token» от Microsoft от oauth2, и с этим я делаю остальную часть логики входа в систему

else if (!StringHelper.isNullOrEmpty(window.location.hash) && window.location.hash.startsWith('#id_token')) {
    let response = window.location.hash;
    this._office365Service.getOfficeId(response)
        .subscribe((result: string) => {
                let key = result;
                if (key) {
                    this._loginService.processOfficeIdResult(key);
                } else {
                    abp.message.warn(this._localizationService.localize('Office365User', this.localizationSourceName));
                }                  
            });
}

Мой вопрос такой: Как мы можем восстановить или, вернее, взять под контроль эту «новую» вкладку и что-то с ней сделать? Как мы можем узнать, когда авторизация завершена? Если она не пройдена или прошла успешно?

В моем предыдущем исследовании все, что я мог найти, это подход обратного вызова, но как вы можете отправить функцию на новую вкладку, которая знает, когда закрывать вкладку? И как вы можете получить информацию об авторизации, когда пользователь успешно аутентифицирован?

var win = window.open("window.html"); 

И что тогда? Вы пишете функцию, которая вызывает себя каждую секунду и проверяет ввод?
(просто бросаю идеи здесь)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...