成功登录AzureAD后,无法在angularJS中获取令牌/msal对象

成功登录AzureAD后,无法在angularJS中获取令牌/msal对象,angularjs,azure-active-directory,msal,Angularjs,Azure Active Directory,Msal,我正在使用msal.js 1.3.2库进行angularJS中的azure AD身份验证。在重定向后成功登录后,不会获取userInfo对象/msal对象,因为它们在重定向后正在初始化。这是我的密码 refApp.config(['$locationProvider', function($locationProvider) { $locationProvider.html5Mode(false).hashPrefix(''); }]); refApp.config(['msalAuth

我正在使用msal.js 1.3.2库进行angularJS中的azure AD身份验证。在重定向后成功登录后,不会获取userInfo对象/msal对象,因为它们在重定向后正在初始化。这是我的密码

refApp.config(['$locationProvider', function($locationProvider) {
    $locationProvider.html5Mode(false).hashPrefix('');
}]);
refApp.config(['msalAuthenticationServiceProvider', '$httpProvider', function (msalProvider,$httpProvider) {

    window.applicationConfig = {
        clientID: '<client id>'
    };

   msalProvider.init(
        {
            authority: 'https://login.microsoftonline.com/<tenant>.onmicrosoft.com',
            validateAuthority : false,
            clientID: applicationConfig.clientID,
            cacheLocation: 'sessionStorage',
            postLogoutRedirectUri: 'https://localhost:8080/logout',
            tokenReceivedCallback: function (errorDesc, token, error, tokenType) { 
                console.log(token);
            }
        },
        $httpProvider
    );
}]);
refApp.controller('myController', ['$scope', '$rootScope','$stateParams', '$state', '$location','accountServices', 'msalAuthenticationService', function($scope,$rootScope,$stateParams, $state, $location, accountServices,msalService){
    $scope.dispWelcomePage = true;
    console.log(msalService); // prints all initialized values after redirect
    console.log(msal); // prints all initialized values after redirect
    if(!(typeof msalService.userInfo === 'undefined' )){
        console.log('userInfo.isAuthenticated is '+msalService.userInfo.isAuthenticated);}//Prints false
    $scope.redirectToLoginPage = function(){
    console.log("Redirecting to Login page");
    msalService.loginRedirect();
}
refApp.config(['$locationProvider',函数($locationProvider){
$locationProvider.html5Mode(false).hashPrefix(“”);
}]);
refApp.config(['msalAuthenticationServiceProvider','httpProvider',函数(msalProvider,$httpProvider){
window.applicationConfig={
客户端ID:'
};
msalProvider.init(
{
当局:'https://login.microsoftonline.com/.onmicrosoft.com',
验证权限:false,
clientID:applicationConfig.clientID,
cacheLocation:“会话存储”,
postLogoutRedirectUri:'https://localhost:8080/logout',
tokenReceivedCallback:函数(errorDesc,token,error,tokenType){
console.log(令牌);
}
},
$httpProvider
);
}]);
refApp.controller('myController',['$scope','$rootScope','$stateparms','$state','location','accountServices','msalAuthenticationService',函数($scope,$rootScope,$stateparms,$state,$location,accountServices,msalService){
$scope.dispWelcomePage=true;
console.log(msalService);//在重定向后打印所有初始化的值
console.log(msal);//在重定向后打印所有初始化值
如果(!(msalService.userInfo的类型==‘未定义’){
console.log('userInfo.isAuthenticated为'+msalService.userInfo.isAuthenticated);}//打印false
$scope.redirectToLoginPage=函数(){
log(“重定向到登录页面”);
msalService.loginDirect();
}
我已经遵循了下面链接中提到的所有步骤
有人可以建议吗?

请确保在成功登录后发出获取令牌请求

  // No callback. App resumes after closing or moving to new page.
                    // Check token and username
                    updateDataFromCache(_msal.loginScopes);
                    if (!_oauthData.isAuthenticated && _oauthData.userName && !_msal._renewActive) {
                        // id_token is expired or not present
                        var self = $injector.get('msalAuthenticationService');
                        self.acquireTokenSilent(_msal.loginScopes).then(function (token) {
                            if (token) {
                                _oauthData.isAuthenticated = true;
                            }
                        }, function (error) {
                            var errorParts = error.split('|');
                            $rootScope.$broadcast('msal:loginFailure', errorParts[0], errorParts[1]);
                        });
                    }

您最好避免使用Angular js并使用msal升级到Angular。因为将有更多支持和更新可用。

请确保在成功登录后发出获取令牌请求

  // No callback. App resumes after closing or moving to new page.
                    // Check token and username
                    updateDataFromCache(_msal.loginScopes);
                    if (!_oauthData.isAuthenticated && _oauthData.userName && !_msal._renewActive) {
                        // id_token is expired or not present
                        var self = $injector.get('msalAuthenticationService');
                        self.acquireTokenSilent(_msal.loginScopes).then(function (token) {
                            if (token) {
                                _oauthData.isAuthenticated = true;
                            }
                        }, function (error) {
                            var errorParts = error.split('|');
                            $rootScope.$broadcast('msal:loginFailure', errorParts[0], errorParts[1]);
                        });
                    }

您最好避免使用Angular js,并使用msal升级到Angular。因为将有更多支持和更新可用。

如果登录成功,请根据您的配置从
本地存储
会话存储

在某些情况下,成功身份验证后,MSAL返回与预期不同的响应

同样的问题可以复制到今天的azure网站上 从Azure门户下载的示例应用程序>应用程序注册>选择你的应用程序>快速入门>SPA>Angular


如果登录成功,请根据您的配置从
localStorage
sessionStorage
获取

在某些情况下,成功身份验证后,MSAL返回与预期不同的响应

同样的问题可以复制到今天的azure网站上 从Azure门户下载的示例应用程序>应用程序注册>选择你的应用程序>快速入门>SPA>Angular


非常感谢您的回复。我观察到以下代码集在成功登录重定向后从未执行过。可能是我缺少了$scope.$on(“msal:loginsucess”,function(){console.log(“loginsucess”);});$scope.$on(“msal:loginFailure”,function(){console.log(“loginFailure”);$scope.$on(“msal:notAuthorized”,函数(事件,拒绝,forResource){console.log(“notAuthorized”);};$scope.$on(“msal:acquireTokenSuccess”,函数(事件,tokenOut){console.log(“acquireTokenSuccess”);});此外,我认为问题在于msal和msalService对象在成功登录重定向后得到初始化。如果我缺少任何详细信息,请道歉,因为这只是一篇没有任何示例的链接文章,而且链接是dead@gsubiran抱歉,我认为提供的示例链接最近已更新。已将答案更新为上一个sample当前不可用感谢您的响应。我观察到以下代码集在成功登录重定向后从未执行过。可能是我缺少了一些$scope.$on(“msal:loginsucess”,function(){console.log(“loginsucess”);};$scope.$on(“msal:loginFailure”,function(){console.log(”loginFailure“;});$scope.$on(“msal:notAuthorized”,函数(event,rejection,forResource){console.log(“notAuthorized”);});$scope.$on(“msal:acquireTokenSuccess”,函数(event,tokenOut){console.log(“acquireTokenSuccess”);});此外,我认为问题在于msal和msalService对象在成功登录重定向后得到初始化。如果我缺少任何详细信息,请道歉,因为这只是一篇没有任何示例的链接文章,而且链接是dead@gsubiran抱歉,我认为提供的示例链接最近已更新。已将答案更新为上一个sample目前不可用