带有新标签的Microsoft授权

时间:2019-01-16 14:19:37

标签: javascript angular typescript oauth-2.0

我需要通过新标签与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.然后,我们的登录页面会收到来自oauth2的Microsoft的“ id_token”,然后我将执行其余的登录逻辑

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"); 

然后呢?您编写一个每秒调用一次并检查输入的函数吗?
(只是在这里提出想法)

0 个答案:

没有答案