2013-02-19 133 views
1

我们希望能够从基本应用程序(BaseApp)启动新应用程序(NewApp)。 BaseApp和NewApp的登录凭证相同,因为它们使用相同的身份存储。 BaseApp和NewApp在不同的技术栈上,都是Web应用程序。他们托管在不同的服务器上。 NewApp为Web访问提供基本的身份验证。使用xmlHTTPRequest在新窗口中打开安全应用程序

如何使用java脚本从BaseApp上的链接启动NewApp。我希望能够注入基本身份验证凭据。

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

其他我可以探索的东西?

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

回答

2

最简单的方法是调用新的窗口下面的网址

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

而是因为你看到以纯文本的凭据,这不是一个很好的解决方案。您应该更好地尝试以下解决方案之一:

  1. 如果使用会话cookie,通常可以将其附加到网址,例如http://newapp?JSESSIONID=kjasbfkji877786sdf
    1. 要么你可以使用相同的cookie从您的基本应用(这不应该是可能的,如果应用程序是在不同的机器)
    2. 通过基本验证创建XMLHttpRequest调用NEWAPP和认证。响应头应该包含来自其他服务器的所需会话cookie。然后你可以用所需的cookie调用NewApp。
  2. 如果您没有会话cookie,您还可以尝试第二种解决方案(XHR),因为如果会话已创建,它也存储在浏览器中,并且浏览器可以管理会话处理本身。

所以在案例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,则可能需要更复杂的后端实现。

+0

感谢您的回应!我无法使用xhr.getResponseHeader(“Cookie”);这给出了一个错误:拒绝获取不安全的标题“Cookie”。 – user2086355 2013-02-20 02:26:46

+0

在我的情况下,BaseApp的会话cookie不适用于NewApp。当我们第一次在BaseApp上完成Basic Auth时,它会生成一个需要使用的新Session Cookie。 通过xhr,我们可以为NewApp调用URL(使用基本身份验证)。这会返回一个带有会话cookie的响应。 我无法弄清楚的问题是,如何在浏览器上的新窗口/选项卡上呈现响应。 – user2086355 2013-02-20 02:32:46

+0

打开一个新窗口是通过javascript中的'window.open(url)'实现的 – 2013-02-20 08:46:28

相关问题