Azure Active Directory javascript库上的单一登录问题

问题描述 投票:0回答:1

我们为MS Dynamics 365 CRM实例启用了单点登录,以调用Azure中托管的API。在启动CRM时,我们会执行以下JavaScript。这大部分时间都有效,但有时我们会弹出“无效参数”。我对使用Adal.js相对较新,并且不知道是什么导致了这一点。任何麻烦拍摄提示赞赏。提前致谢。

config = {
    ApiUrl: configData["ApiUrl"],
    SubscriptionKey: configData["SubscriptionKey"],
    trace: configData["trace"],
    AcceptHeader: configData["AcceptHeader"],
    ContentTypeHeader: configData["ContentTypeHeader"],
    tenant: configData["tenant"],
    clientId: configData["clientId"],
    tokenStoreUrl: configData["tokenStoreUrl"],
    cacheLocation: configData["cacheLocation"],
    GraphApi: configData["GraphApi"]
};
// Check For & Handle Redirect From AAD After Login
authContext = new window.AuthenticationContext(config);
var isCallback = authContext.isCallback(window.location.hash);

if (isCallback) {
    authContext.handleWindowCallback();
}

var loginError = authContext.getLoginError();
if (loginError) {
    console.log('ERROR:\n\n' + loginError);
}
authContext.popUp = true;
if (isCallback && !loginError) {
    window.location = authContext._getItem(authContext.CONSTANTS.STORAGE.LOGIN_REQUEST);
}
var user = authContext.getCachedUser();
if (!user) {                            
    authContext.clearCache(); 
    sessionStorage["adal.login.request"] = "";                           
    authContext.login();
}

window.parent.authContext = authContext;

enter image description here

dynamics-crm adal adal.js
1个回答
0
投票

自从我上次看到这个问题已经有一段时间了,但是当时我设法解决了这个问题。我实现了一个锁定机制,以确保在尝试获取令牌之前完成登录。

这是更新的代码:

config = {
                            ApiUrl: configData["ApiUrl"],
                            SubscriptionKey: configData["SubscriptionKey"],
                            trace: configData["trace"],
                            AcceptHeader: configData["AcceptHeader"],
                            ContentTypeHeader: configData["ContentTypeHeader"],
                            tenant: configData["tenant"],
                            clientId: configData["clientId"],
                            tokenStoreUrl: configData["tokenStoreUrl"],
                            cacheLocation: configData["cacheLocation"],
                            GraphApi: configData["GraphApi"],
                            loadFrameTimeout: 10000
                        };


                    // Check For & Handle Redirect From AAD After Login
                    authContext = new window.AuthenticationContext(config);
                    var isCallback = authContext.isCallback(window.location.hash);

                    if (isCallback) {
                        authContext.handleWindowCallback();
                    }

                    var loginError = authContext.getLoginError();
                    if (loginError) {
                        // TODO: Handle errors signing in and getting tokens
                        console.log('ERROR:\n\n' + loginError);
                    }
                    authContext.popUp = true;
                    if (isCallback && !loginError) {
                        window.location = authContext._getItem(authContext.CONSTANTS.STORAGE.LOGIN_REQUEST);
                    }
                    var user = authContext.getCachedUser();
                    if (!user) {
                        authContext.clearCache();
                        sessionStorage["adal.login.request"] = "";
                        authContext.callback = function (error, token, msg) {
                            // remove lock
                            window.top.loginLock = null;
                            if (!!token) {
                                getGraphApiTokenAndUpdateUser(authContext);
                            }
                            else {
                                console.log('ERROR:\n\n' + error);
                            }
                        };

                        if (typeof (window.top.loginLock) == "undefined" || window.top.loginLock  == null) {
                            // Create lock
                            window.top.loginLock  = true;
                            authContext.login();
                        }
                    }

                    window.parent.authContext = authContext;
© www.soinside.com 2019 - 2024. All rights reserved.