【发布时间】:2017-03-27 09:10:23
【问题描述】:
我正在开发一个包含 Auth 0 和 Azure AD 的应用程序,用于不同域的用户身份验证。例如。 gmail.com 和 outlook.com 的 Auth0 和其他域的 Azure AD。我想让他们分开。为此,我正在显示一个选项页面,用户可以在其中选择登录选项(Auth0 或 AzureAd)。
我正在使用 Angularjs 框架和 .Net。
如果仅使用一个登录选项(即 Auth0 或 Azure Ad)专门实施,则 Auth0 和 Azure AD 的登录过程都可以顺利进行。但是一起使用时会乱码。问题始于状态路由和从 ClaimsPrincipal(.NET) 访问登录用户的电子邮件。一个(Auth0/AzureAd)似乎覆盖了 ClaimsPrincipal。例如。如果我在 Azure AD 中使用 a@b.com 登录并发布注销,我会尝试通过 Auth0 使用电子邮件 c@d.com 再次登录,ClaimsPrincipal仍然返回 Azure AD 用户的电子邮件,即 a@b 而不是 c@d。
我确信这是因为有两个拦截器拦截请求,每个拦截器一个。 ProtectedResourceInterceptor:Azure AD 和 jwtInterceptor: Auth0
我尝试创建一个服务提供程序,该服务提供程序在选择登录选项 (Auth0/AzureAD) 时动态尝试从 $httpProvider 推送或弹出拦截器。
app.config(['$provide', '$httpProvider', function ($provide, $httpProvider) {
$provide.decorator('$interceptorManager', ['$delegate', '$injector', function ($delegate, $injector) {
$delegate.addInterceptor = function (loginOptionValue) {
if (loginOptionValue) {
switch (loginOptionValue) {
case 'Auth 0':
var index = $httpProvider.interceptors.indexOf('ProtectedResourceInterceptor');
if (index != -1) $httpProvider.interceptors.splice(index, 1);
$httpProvider.interceptors.push('jwtInterceptor');
break;
case 'Azure Ad':
var index = $httpProvider.interceptors.indexOf('jwtInterceptor');
if (index != -1) $httpProvider.interceptors.splice(index, 1);
$httpProvider.interceptors.push('ProtectedResourceInterceptor');
break;
}
}
console.log('Adding Interceptio: '+$httpProvider.interceptors.length);
}
$delegate.removeInterceptors = function (loginOptionValue) {
var index = -1;
//var index = $httpProvider.interceptors.indexOf('ProtectedResourceInterceptor');
//if (index != -1) $httpProvider.interceptors.splice(index, 1);
index = $httpProvider.interceptors.indexOf('jwtInterceptor');
if (index != -1) $httpProvider.interceptors.splice(index, 1);
}
$delegate.printInterceptors = function () {
for (var i = 0 ; i < $httpProvider.interceptors.length ; i++)
console.log($httpProvider.interceptors[i]);
}
return $delegate;
}]);
}]);
但这似乎对我不起作用。在同时部署 Auth 0 和 Azure AD 时,我应该如何实现不间断的登录过程?
【问题讨论】:
-
有没有我们可以同时实现的?
-
好的,现在,在阅读了一篇文章后,我可以从 Auth 0 访问我的 Azure Active Directory。我可以成功登录到我的应用程序。但我有一个问题。截至目前,Auth 0 对我添加到其目录的每个用户收费。 Auth 0 是否会对我添加到 Azure Active Directory 的每个用户收费?我很困惑,因为我没有将用户添加到 Auth 0,我只是将它用于登录。在另一端,正在将用户添加到 Azure AD。
标签: asp.net angularjs auth0 azure-active-directory