为多个应用程序/环境配置adal.js

时间:2019-06-10 08:57:51

标签: azure-active-directory adal.js

在为现有应用程序(生产)的新环境(QA)设置新的Azure Web App时,我试图创建一个条件逻辑,该逻辑将针对QA应用程序注册而不是生产应用程序注册进行身份验证。这个想法是要保持分隔,允许重定向URI之间保持环境之间的独立性。

对我来说,不允许重定向到与授权目标不同的应用程序是有意义的,但是可行的解决方案是仅允许重定向到QA URI?但是,这会创建一个我不太喜欢的跨环境依赖性。

假设维持允许的重定向URI的分隔,则需要ADAL配置中的条件逻辑,以便尝试登录QA应用程序的用户不会针对生产应用程序进行身份验证,因为该应用程序注册将不允许重定向至质量检查URI。

QA Azure Web App正在与我们的生产Web应用程序以不同的订阅设置,但租户相同。我已经使用process.env.NODE_ENV(在start.js / build.js中进行了设置)来分隔(localhost)开发配置,但是由于QA服务器应该是生产型的,因此NODE_ENV将在此处设置为“生产”,因此无法使用相同的方法来区分质量检查和生产。

考虑到其他几个选择,我尝试根据window.location.href区分质量检查和生产(请参见下面的代码示例)

import { AuthenticationContext } from 'react-adal';

var adalConfig = {
    tenant: 'tenant-id',
    endpoints: {
        api: 'https://graph.microsoft.com',
    },
    postLogoutredirectUri: window.location.origin,
    cacheLocation: 'localStorage'

if (!process.env.NODE_ENV || process.env.NODE_ENV === 'development') {
  adalConfig.clientId = 'development-web-app-client-id';
} else if (window.location.href === 'QA URI') {
  adalConfig.clientId = 'qa-web-app-client-id';
} else
  adalConfig.clientId = 'production-web-app-client-id';
}

var authContext = new AuthenticationContext(adalConfig);

if (authContext.isCallback(window.location.hash)) {

    authContext.handleWindowCallback();
    var err = authContext.getLoginError();
    if (err) {
        // TODO: Handle errors signing in and getting tokens
    }
}

export {adalConfig};
export {authContext};
export const getToken = () => {
    return authContext.getCachedToken(authContext.config.clientId);
};

这会导致尝试登录QA Web应用程序时进行身份验证尝试的无限循环,并且由于某种原因,还使生产Web应用程序的访问者针对QA应用程序注册进行身份验证(一旦QA应用程序,身份验证实际上就成功了注册已更新,以允许重定向到生产URI。

那是黑暗中的一枪,现在我不确定如何最好地进行。缺少相关的搜索结果使我认为我要实现的目标与最佳实践之间存在显着差异。向正确方向的颠簸将不胜感激!

1 个答案:

答案 0 :(得分:0)

使用PCollection<PubsubMessage> pubsubMessage = pipeline .apply(PubsubIO.readMessagesWithAttributes().fromSubscription("") 代替window.location.host,该条件按预期工作,并且可以根据主机设置不同的href