【问题标题】:ADAL.JS and Offline Web AppADAL.JS 和离线 Web 应用
【发布时间】:2017-02-22 00:48:21
【问题描述】:

我有一个实现ADAL.JS 的网页。

通过网络浏览页面时,它可以完美运行;但是,当我尝试在 iPhone 上查看它并使用添加到主屏幕按钮将其保存为桌面上的快捷方式时,事情就变得混乱了。

初始页面 (index.html) 使用 apple-mobile-web-app-capable 元标记正确显示;但是,当调用身份验证时,我会被带到一个真实的浏览器窗口。重定向回 index.html 后,我仍然在单独的浏览器窗口中,而不是在 Web 应用视图中。

最终,我希望将其作为一个离线网站,所有页面功能都在apple-mobile-web-app-capable 生成的视图中运行。任何其他关于如何实现这一点的想法都值得赞赏。

提前致谢。

【问题讨论】:

    标签: javascript html azure adal


    【解决方案1】:

    这是目前 iOS webapps 中存在的大问题之一。每个链接或重定向都会在新窗口中打开。 您可以使用 JavaScript 更改 window.location.href 来修复它。

    【讨论】:

    • 奇怪的是,如果我有一个名为 index.html 的文件并对 www.google.com 执行 window.location.href,我仍然在 webapp 中。但是,当 ADAL 通过 window.location 将我重定向到 AD 登录页面时,ADAL 登录页面位于单独的窗口中。当您说通过使用 JS 更改 window.location.href 来修复它时。您建议我如何这样做...更新 ADAL JS 代码以使用 href 属性而不是 window.location?
    • Adal.js 提供了一种不改变自身的方法。我认为只需将以下内容写入 your 脚本即可(将 %ac% 替换为 AuthentificationContest 变量):%ac%.config.displayCall=function(url){ if (urlNavigate) { this.info('Navigate to:' + urlNavigate); window.location.href=urlNavigate; } else { this.info('Navigate url is empty'); } }
    • 请看我的其他答案...试图将其与此评论联系起来,但太长了
    【解决方案2】:

    似乎遗漏了什么...我收到 urlNavigate 未定义错误...建议?

    alert('Running Auth');
    

    在线 = navigator.onLine;

    authContext = new AuthenticationContext({
        tenant: azureTenant,
        clientId: azureClientId,
        postLogoutRedirectUri: window.location,
        //redirectUri: "https://shlpkpiapi.azurewebsites.net/kpiapp/test.html"
    });
    
    authContext.config.displayCall=function(url){ 
    
        if (urlNavigate) 
        { 
            this.info('Navigate to:' + urlNavigate); 
            window.location.href=urlNavigate; 
        } 
        else
        { 
            this.info('Navigate url is empty'); 
        } 
    }
    
    
    
    if (authContext.isCallback(window.location.hash)) {
    
        authContext.handleWindowCallback();
        var err = authContext.getLoginError();
        if (err) {
            alert('Error on callback')
        }
    }
    else {
    
        var user = authContext.getCachedUser();
        if (user) {
            //We have a user in cache and are using those credentials
            console.log('Signed in as: ' + user.userName);
    
    
        } else {
            console.log('Not signed in.')
            if (online)
            {
                alert('signing in');
                authContext.login();
            }
            else
            {
                alert('currently offline');
            }       
        }
    }
    

    【讨论】:

    • 我的错:函数的参数应该是urlNavigate而不是url
    • 在下面添加了我的回复。
    【解决方案3】:

    好的...我进行了更改,错误消失了,但我不明白这应该如何解决问题。当我将我的页面添加到我的 iPhone 主屏幕 (https://xxxxx.azurewebsites.net/app/test.html) 并单击磁贴时,我将被带到 test.html 页面。在该页面上,有一个执行的身份验证函数使用 adal.js 并将我带到“https://login.microsoftonline.com/xxx.onmicrosoft.com/oauth2...”。这显示在我的 IOS Web 应用程序的范围内,并列出了我的帐户和使用另一个帐户选项。我点击我的帐户或选择使用另一个帐户选项,然后我被带到在 Safari 中打开的另一个页面。

    【讨论】:

    • 我知道这与我自己的 iOS webapp 类似的问题。你无法控制外国网站,所以目前我没有什么可以建议你的了。如果我知道一种方法并且可以将其实现到我的 web 应用程序中,我会告诉你的。
    • 请做。你用过Auth0吗?这可能是答案吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多