Adal Infinite重定向+ Edge +可信站点

时间:2017-04-07 12:45:30

标签: angularjs adal adal.js

背景 我有一个单页面应用程序(使用Angular构建),它使用adal和adal-angular对Azure Active Directory进行身份验证。 一直使用版本1.0.7的adal和adal-angular(尝试使用1.0.14,但仍然没有运气)和ui-router用于路由。

问题: 在尝试专门访问Edge浏览器上的Web应用程序时,很少有用户获得连续的身份验证循环。 请注意,它适用于IE,Chrome和Firefox。令人惊讶的是,当在InPrivate窗口中打开Edge时,它也可以正常工作。 此问题是特定于设备的,特定于用户的,仅发生在Edge中。

解决方法: 当我的网站被添加到受信任的站点(通过控制面板 - > Internet选项)时,身份验证循环问题得到解决,一切都无缝地工作。

知道为什么会这样吗? 从我现在假设的是,当adal写入auth cookie到网站并且Edge似乎无法读取它时,这是一个cookie问题?

对于更好的修复/解决方法,还有任何建议吗?因为我无法告诉所有用户将我的网站添加到他们的可信站点集合中。

app.js的代码段:

function authenticationInit(adalAuthenticationServiceProvider, $httpProvider, $locationProvider) {
$locationProvider.html5Mode(false);
var endpoints = {
// Map the location of a request to an API to a the identifier of the associated resource
"EndPointKey": window.config.aadEndPointUrl,
"EndPointValue": window.config.aadResouceIdUrl
};
    adalAuthenticationServiceProvider.init(
              {
                  instance: window.config.AADAuthenticationInstance,
                  tenant: window.config.tenant,
                  clientId: window.config.clientId,
                  extraQueryParameter: 'nux=1',
                  endpoints: endpoints
              }, $httpProvider);
}


function registerRoutes($stateProvider) {

    $stateProvider
        .state('home', {
            templateUrl: getViewUrl('widgets'),
            controller: 'WidgetsController',
            controllerAs: 'widget',
            url: '/dashboard'
        })
         .state('terms',
        {
            templateUrl: getViewUrl('terms'),
            controller: 'TermsController',
            controllerAs: 'terms',
            url: '/terms'
        })
}


$rootScope.$on('$locationChangeStart', function (e) {
if (adalAuthenticationService.userInfo.isAuthenticated == false) { // Will be executed during first time login and token expiration
adalAuthenticationService.login();
}
});


$rootScope.$on("adal:loginSuccess", function (e) { // Will be executed after AAD authentication is successful
NavigationFactory.navigateTo('home');
});

在此处提出了相同的查询 - https://github.com/AzureAD/azure-activedirectory-library-for-js/issues/537

1 个答案:

答案 0 :(得分:0)

adal使用localStorage来保存令牌并稍后从中读取数据(您还可以选择将其更改为会话存储)。关键是如果adal无法写入本地存储,您将无法获得令牌。 Microsoft Edge中有一个允许网站存储数据的设置。要启用此功能,请转到:设置>高级设置并启用:'让网站在我的设备上保存受保护的媒体许可'。我希望这可以解决您的问题。