不能让ADAL拦截器在Angular中工作
Cant get ADAL interceptor to work in Angular
我们的应用程序使用azure活动目录身份验证。我已经把它包括在SPA,我能够让它的工作登录。我得到一个宣誓令牌,我可以存储它并看到它。
微软的ADAL-Angular.js提供了一个拦截器,这样token就可以被添加到所有的$http调用中。它应该不需要更改SPA来使用它。我似乎无法使它工作。
我在app.js中注册了这个提供商,并把它推送到$httpprovider(尽管ADAL-Angular是这样做的)。代码如下:
var connectionsApp = angular.module('app',
['ngRoute', 'ngResource', 'ngCookies',
'tc.views', 'tc-flightProcessing', 'tc-agent', 'ui.bootstrap', 'ui.tab.scroll', 'AdalAngular'])
.run(run);
connectionsApp.config(['scrollableTabsetConfigProvider', '$httpProvider', 'adalAuthenticationServiceProvider', function(scrollableTabsetConfigProvider,$httpProvider, adalAuthenticationServiceProvider){
scrollableTabsetConfigProvider.setShowTooltips (true);
scrollableTabsetConfigProvider.setTooltipLeftPlacement('bottom');
scrollableTabsetConfigProvider.setTooltipRightPlacement('left');
adalAuthenticationServiceProvider.init(
{
tenant: 'xxxxxxxxx-9fafd38f483f',
clientId: 'xxx'
}, $httpProvider);
$httpProvider.interceptors.push('ProtectedResourceInterceptor');
}]);
这是服务电话。
var getDelayCodes = function () {
if (isPromisePending) {
return deferred.promise;
}
deferred = $q.defer();
isPromisePending = true;
debugger;
$http({
method: 'GET',
url: envService.endPoint + 'delaycode'
headers: {'Content-Type': 'application/json'}
})
.then(function successCallback(response){
result = response.data;
isPromisePending = false;
deferred.resolve(result);
},
function errorCallback(response) {
isPromisePending = false;
deferred.reject(response.data);
});
return deferred.promise;
如果我手动设置标题,它可以工作,但我不想在每个服务中都这样做。如此:
$http.defaults.headers.post.Authorization = "Bearer " + sessionStorage.getItem("adal.idtoken");
$http.defaults.headers.common.Authorization = "Bearer " + sessionStorage.getItem("adal.idtoken");
提前感谢您的帮助。
可能是adal.js没有将您发送请求的URL识别为"后端请求",所以它没有尝试自动注入令牌。查看这里的逻辑:https://github.com/AzureAD/azure-activedirectory-library-for-js/blob/dev/lib/adal.js#L843-L844
代码示例使用相对url,应该可以正常工作。
如果你不想使用adal.js的启发式,你应该能够通过endpoints
参数显式地添加你的url: https://github.com/Azure-Samples/active-directory-angularjs-singlepageapp-dotnet-webapi/blob/master/TodoSPA/App/Scripts/app.js#L21-L26
您不需要这一行。
httpProvider.interceptors.push('ProtectedResourceInterceptor');
这个函数已经在adal库的init方法中被调用了。
if (httpProvider && httpProvider.interceptors) {
httpProvider.interceptors.push('ProtectedResourceInterceptor');
}
相关文章:
- 我的shareService在angular 2中发送值工作正常,但当我渲染我的另一个组件时,会获得默认值
- 为什么不是'我的函数在解析云代码中工作吗?当我在Angular和Express中测试时,它是有效的
- 注入工厂时,Angular停止工作
- Angular Js布线工作不正常
- 代码在angular中未按预期工作
- Angular JS-视图不工作
- angular js应用程序不工作
- grunt serve:dist时找不到Angular.js模块,但grunt serve工作正常
- 带有Angular指令的HTML;附加时无法工作
- 2D数组在Angular JS 1.2.x中工作,而不是在1.3.x中工作
- 如何使Angular JS控制器与指令一起工作
- $scope$Angular中的手表;我不在爱奥尼亚/科尔多瓦工作
- 让typescript与facebook登录为Angular 2项目工作
- 提前输入以在 Angular 模板中工作
- 最基本的 Angular 应用程序无法正常工作
- Angular 的新手 - 在 eclipse 中的设置无法正常工作
- 与 Angular 1.5 的单向数据绑定类似于双向工作
- 使用 Angular 和 UI-bootstrap 对模态事件绑定无法工作的指令
- Angular ng sortable-如果我在一个栏中添加了一个搜索框,则拖放在两列之间无法正常工作
- Angular工作不正常