2013-02-19 135 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

相關問題