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