ADAL 请求uireADLogin 和angular-ui-路由器?
ADAL requireADLogin and angular-ui-router?
我有一个 angular (1.x) SPA,我正在尝试通过 ADAL 保护它以要求通过 Azure AD 进行身份验证。
然而,即使是标有 requireADLogin: true
的 routes/pages/states 似乎也允许用户在不需要授权的情况下访问它们。
我想知道问题是不是我使用的是 angular-ui-router (0.4.2) 而不是 ngRoute,因此我对 routes/states 的配置没有真正考虑在内。
我的 HTMl 模板显示 userInfo
并且在第一次加载时是 {"isAuthenticated":false,"userName":"","loginError":""}
,但是页面加载(包括子 route/state),即使我设置 requireADLogin: true
shell and/or 子状态(见下文)。
我有一个登录按钮,指向弹出窗口中的登录顺序,完成后,页面会显示已登录用户的用户信息,
所以我想我把剩下的都安排好了。
v
// My top-level app config block:
function AppConfig($stateProvider, $urlRouterProvider, $httpProvider, adalAuthenticationServiceProvider) {
// Configure the urlRouteProvider to redirect to /intro by default
$urlRouterProvider.otherwise("/intro");
// Configure the ADAL Auth Provider
adalAuthenticationServiceProvider.init({
tenant: "[MyTenantID]",
clientId: "[MyClientID]",
popUp: true
}
// // pass http provider to inject request interceptor to attach tokens
// $httpProvider
);
}
// Later I set up my shell state/route (all other states are children of this one):
$stateProvider.state('shell', {
//blank url as the shell is an abstract parent to every other state
url: '',
templateUrl: 'app/shell/shell.html',
controller: 'ShellController',
controllerAs: 'vm',
abstract: true,
requireADLogin: false // <-- tried with requireADLogin: true
});
// Intro (aka shell.intro) should be the default state:
$stateProvider.state('shell.intro', {
url: '/intro',
templateUrl: 'app/intro/intro.html',
controller: 'IntroController',
controllerAs: 'vm',
data: {
pageTitle: 'Intro'
},
requireADLogin: true
});
我对你的代码片段进行了快速测试,发现主要的罪犯可能是在 adalAuthenticationServiceProvider.init
功能下评论句子 $httpProvider
的操作。
请取消注释这句话,代码示例中也提供了原因 https://github.com/AzureAD/azure-activedirectory-library-for-js#getting-started:
$httpProvider // pass http provider to inject request interceptor to attach tokens
我这边会解决你的问题,请试试。
我有一个 angular (1.x) SPA,我正在尝试通过 ADAL 保护它以要求通过 Azure AD 进行身份验证。
然而,即使是标有 requireADLogin: true
的 routes/pages/states 似乎也允许用户在不需要授权的情况下访问它们。
我想知道问题是不是我使用的是 angular-ui-router (0.4.2) 而不是 ngRoute,因此我对 routes/states 的配置没有真正考虑在内。
我的 HTMl 模板显示 userInfo
并且在第一次加载时是 {"isAuthenticated":false,"userName":"","loginError":""}
,但是页面加载(包括子 route/state),即使我设置 requireADLogin: true
shell and/or 子状态(见下文)。
我有一个登录按钮,指向弹出窗口中的登录顺序,完成后,页面会显示已登录用户的用户信息, 所以我想我把剩下的都安排好了。 v
// My top-level app config block:
function AppConfig($stateProvider, $urlRouterProvider, $httpProvider, adalAuthenticationServiceProvider) {
// Configure the urlRouteProvider to redirect to /intro by default
$urlRouterProvider.otherwise("/intro");
// Configure the ADAL Auth Provider
adalAuthenticationServiceProvider.init({
tenant: "[MyTenantID]",
clientId: "[MyClientID]",
popUp: true
}
// // pass http provider to inject request interceptor to attach tokens
// $httpProvider
);
}
// Later I set up my shell state/route (all other states are children of this one):
$stateProvider.state('shell', {
//blank url as the shell is an abstract parent to every other state
url: '',
templateUrl: 'app/shell/shell.html',
controller: 'ShellController',
controllerAs: 'vm',
abstract: true,
requireADLogin: false // <-- tried with requireADLogin: true
});
// Intro (aka shell.intro) should be the default state:
$stateProvider.state('shell.intro', {
url: '/intro',
templateUrl: 'app/intro/intro.html',
controller: 'IntroController',
controllerAs: 'vm',
data: {
pageTitle: 'Intro'
},
requireADLogin: true
});
我对你的代码片段进行了快速测试,发现主要的罪犯可能是在 adalAuthenticationServiceProvider.init
功能下评论句子 $httpProvider
的操作。
请取消注释这句话,代码示例中也提供了原因 https://github.com/AzureAD/azure-activedirectory-library-for-js#getting-started:
$httpProvider // pass http provider to inject request interceptor to attach tokens
我这边会解决你的问题,请试试。