javascript - 使用 xmlHTTPRequest 在新窗口中打开安全应用程序

标签 javascript web-applications xmlhttprequest

我们有一个要求,我们希望能够从基本应用程序 (BaseApp) 启动新应用程序 (NewApp)。 BaseApp 和 NewApp 的登录凭据相同,因为它们使用相同的身份存储。 BaseApp 和 NewApp 在不同的技术栈上,都是 Web 应用程序。它们托管在不同的服务器上。 NewApp 为网络访问提供基本的身份验证。

如何使用 java 脚本从我的 BaseApp 上的链接启动 NewApp。我希望能够注入(inject) Basic Auth 凭据。

我尝试过使用 xmlHTTPRequest,但它似乎更适合调用 REST 服务和处理获取的数据,而不是启动 URL。 使用 java 脚本 window.open(url) 不允许我注入(inject)授权 header !

还有什么我可以探索的吗?

附加信息: BaseApp 的 session cookie 不适用于 NewApp。当我们第一次在 BaseApp 上完成 Basic Auth 时,它会生成一个新的 Session Cookie,需要使用它。 通过 xhr,我们可以调用 NewApp 的 URL(使用 Basic Auth)。这将返回带有 session cookie 的响应。 我无法弄清楚的问题是,如何在浏览器的新窗口/选项卡上呈现响应。

最佳答案

最简单的解决方案是使用以下 url 调用新窗口

http://<user>:<pass>@newapp

但这不是一个好的解决方案,因为您会看到纯文本形式的凭据。您最好尝试以下解决方案之一:

  1. 如果您使用 session cookie,通常可以将其附加到 url,例如 http://newapp?JSESSIONID=kjasbfkji877786sdf
    1. 要么您可以使用与您的基本应用程序相同的 Cookie(如果应用程序位于不同的机器上,那应该不可能)
    2. 创建 XMLHttpRequest 调用 NewApp 并通过 BasicAuth 进行身份验证。响应 header 应包含来自其他服务器的所需 session cookie。然后您可以使用所需的 cookie 调用 NewApp。
  2. 如果您没有 session cookie,您也可以尝试第二种解决方案 (XHR),因为如果创建了 session ,它也会存储在浏览器中,并且浏览器可以自行管理 session 处理。

所以在案例 1.2 中。和 2. 您应该执行以下操作:

var XMLReq = new XMLHttpRequest();
XMLReq.open("GET", "url", asynchronous?, "user", "password");
XMLReq.send(null);

案例1.2。您需要为后续调用提供额外的处理程序:

XMLReq.onload = function() {
    window.open('http://NewApp?JSESSIONID='+XMLReq.getResponseHeader('Cookie')); 
    // note that 'JSESSIONID' depends on your backend implementation, this example is made for java backend
}

在情况 2 中,它很简单

XMLReq.onload = function() {
    window.open('http://NewApp'); 
}

在这种情况下,最好的解决方案是 OAuth 或 OpenID,但这取决于您的用例和系统环境,如果当前不支持 OAuth 或 OpenID,则可能需要更复杂的后端实现。

关于javascript - 使用 xmlHTTPRequest 在新窗口中打开安全应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14953577/

相关文章:

javascript - 如何在需要 header 的axios发布请求中具有配置参数

json - 如何使用 d3.js 同步加载 JSON 数据?

javascript - 如何使用 XMLHttpRequest 捕获无效 URL 引发的错误

javascript - 为什么我需要使用 'this' 来访问映射中的值?

Javascript 函数乱序完成——异步

javascript - 关于 :blank in regards to same origin policy 的来源

javascript - 在正文中嵌入 &lt;script&gt; 标签..有什么影响?

javascript - 有没有办法禁止我的网站使用 cookie?

javascript - 如何更改复选框单击行中的输入字段名称

asp.net - 如何在 ASP.NET 应用程序中唯一标识客户端计算机?