如何从iFrame中检索访问令牌还是有其他选择? AdalJS

时间:2018-06-04 08:05:07

标签: azure-active-directory access-token sharepoint-online adal adal.js

我在Azure AD中注册了一个应用程序。

现在我尝试在我的SharePoint页面上使用AdalJS访问令牌(我认为,使用Adal并不重要)。

这是我的剧本:

第一版:

var config = {
    tenant: 'my-tenant.onmicrosoft.com',
    clientId: '12c06e50-05bb-4011-a84b-xxxxxxxxxxxx',
    postLogoutRedirectUri: window.location.origin,
    anonymousEndpoints: [ "/" ],
    endpoints: {
        sharePointUri: "https://my-sharepoint.sharepoint.com"
    },
   cacheLocation: "localStorage"
};

var authContext = new AuthenticationContext(config);

var isCallback = authContext.isCallback(window.location.hash);
authContext.handleWindowCallback();

if (isCallback && !authContext.getLoginError()) {
    window.location = 
authContext._getItem(authContext.CONSTANTS.STORAGE.LOGIN_REQUEST);
}


var user = authContext.getCachedUser();
if (!user) {    
    authContext.login();
}

authContext.acquireToken(config.endpoints.sharePointUri, function (error, 
token) {

    if (error || !token) {
        console.log("ADAL error occurred: " + error);
        return;
    }
    else {
        console.log(token);
    }
});

第二版:

var config = {
    //tenant: 'my-tenant.onmicrosoft.com',
    clientId: '12c06e50-05bb-4011-a84b-xxxxxxxxxxxx',
    postLogoutRedirectUri: window.location.origin,
    //anonymousEndpoints: [ "/" ],
    endpoints: {
        sharePointUri: "https://my-sharepoint.sharepoint.com"
    },
    //cacheLocation: "localStorage"
};

var authContext = new AuthenticationContext(config);

if (authContext.isCallback(window.location.hash)) {

    authContext.handleWindowCallback();
    var err = authContext.getLoginError();
    if (err) {
        console.log('ERROR:\n\n' + err);
    }
} else {

    var user = authContext.getCachedUser();
    if (user) {
        console.log('Signed in as: ' + user.userName);
        console.log('Getting access token...');

        authContext.acquireToken(
            config.endpoints.sharePointUri,
            function (error, token) {
                if (error || !token) {

                    console.log('ERROR:\n\n' + error);

                } else {
                    console.log(token);
                }

            }
        );
    } else {
        console.log('Not signed in.');
        //authContext.login();
    }
}

两个版本都给出相同的结果:当脚本执行acquireToken方法时,我不会在回调中获得任何令牌。它不会回调。我有" adalRenewFrame"插在我的页面上。这个框架有一个链接。当我将此链接复制到我的浏览器时,它会将我重定向到我之前访问过的页面,并在URL中提供我的访问令牌:

Token in URL

问题是我需要以编程方式检索令牌。我无法通过代码重现这些操作。特别是,我无法在" adalRenewFrame"中使用该链接执行GET或POST请求。为什么脚本没有在acquireToken方法中进行回调?

请指教。我将非常感激。

谢谢!

0 个答案:

没有答案