在Dynamics 365中使用ADAL.js获取令牌而不会弹出

时间:2019-05-09 13:50:04

标签: javascript crm dynamics-365 adal.js

我正在尝试使用ADAL.js进行身份验证以从JS获取令牌。

在下面的代码中,我试图获取缓存的用户和令牌。如果没有缓存用户和令牌,则在CRM中打开一个弹出页面,然后缓存用户和令牌。

var getUser = function () {
    return new Promise(function (resolve, reject) {
        // If the user is cached, resolve the promise immediately.
        var user = authContext.getCachedUser();
        if (user) {
            var cachedToken = authContext.getCachedToken(clientId);
            resolve(cachedToken);
            return;
        }

        // The user was not cached. Open a popup window which
        // performs the OAuth login process, then signals
        // the result.
        authContext.config.displayCall = function (url) {
            authContext.config.displayCall = null;
            var popup = window.open(url, 'auth-popup', 'toolbar=no,status=no,menubar=no,scrollbars=no,resizable=no,left=10000, top=10000, width=10, height=10, visible=none');

            var intervalId = window.setInterval(function () {
                try {
                    if (popup.location.pathname.indexOf('/' + dummyAuthPage) >= 0) {

                        authContext.handleWindowCallback(popup.location.hash);
                        popup.close();
                        token = authContext.getCachedToken(clientId);
                        if (token) {
                            window.clearInterval(intervalId);
                            resolve(token);
                        }
                        else {
                            reject(authContext.getLoginError());
                        }
                    }
                } catch (whatever) {
                    if (popup.closed) {
                        reject();
                    }
                }
            }, 100);
        };

我们是否有更好的方法来做到这一点,尤其是在没有弹出窗口的情况下?

我目前正在尝试做Silent Authentication。但是这里提到“在选项卡的内容页面中,调用microsoftTeams.getContext()以获得当前用户的登录提示”。此命令不会在CRM中返回任何内容。

谢谢

1 个答案:

答案 0 :(得分:0)

您可以尝试以下docs.microsoft链接Silent authentication

中所述的静默身份验证