2013-02-27 96 views
2
  • 我們有一個iPad應用程序顯示來自drupal站點(僅提供json文件)的內容。
  • 我們的IT部門在Drupal站點前放置了一個SSO。 WebSEAL用於實現SSO。
  • 所以當我們從瀏覽器訪問drupal站點時,我們被重定向到登錄頁面(表單身份驗證),我們需要輸入我們的windows用戶名&密碼才能繼續。

當我們試圖從ipad訪問json文件時,我們得到了帶有html內容的401狀態,並帶有url來登錄頁面。我們嘗試通過在標題中發送用戶名和密碼來使用基本身份驗證,但它沒有奏效。谷歌搜索沒有提供任何有用的解決方案。以編程方式訪問託管在WebSEAL反向代理後面的資源

是否有人有類似的問題?我只需要用非瀏覽器客戶端的用戶名和密碼進行身份驗證。

樣品節點js代碼

var http = require('http'); 


var username = 'username'; 
var password = 'password'; 
var auth = "Basic " + new Buffer(username + ":" + password).toString("base64"); 


var options = { 
    host: 'devhome.intranet.example.com', 
    port: 80, 
    path: '/app/api/rest/views/category.json', 
    headers : { 
    "Authorization" : auth 
    } 
}; 

http.get(options, function(res) { 
    console.log("Got response: " + res.statusCode); 
    console.log(res); 
}).on('error', function(e) { 
    console.log("Got error: " + e.message); 
}); 

任何幫助高度讚賞。

THX

回答

2

我知道這是一個老問題,但我試圖做的非常類似的事情(.Net客戶端訪問背後的WebSEAL Web服務)。 Google搜索後沒有有用的解決方案。

但是IBM文檔給了我一個線索 http://www.ibm.com/support/knowledgecenter/SSPREK_8.0.1.2/com.ibm.isamw.doc_8.0.1.2/wrp_config/task/tsk_submt_form_data_ws.html

基本上當你通過WebSEAL從瀏覽器訪問的資源,與登錄頁面的WebSEAL響應。輸入用戶名和密碼後,表單數據將提交給/pkmslogin.form。 Webseal還會返回一個cookie,以便後續請求不必再次進行身份驗證。

這意味着你需要發送POST請求有:

的POST必須作出/pkmslogin.form。 POST請求正文必須包含三個字段的字段數據: 用戶名,密碼,登錄表單類型

對於表單登錄,login-form-type的值必須爲「pwd」。 內容長度標頭必須指示生成的請求主體的長度。

我在使用HttpClient的.Net中做了這個。事情是這樣的:

using (var httpClient = new HttpClient()) 
{ 
    // First post the authentication data 
    var authenticationResult = httpClient.PostAsync("http://webseal/pkmslogin.form", 
     new FormUrlEncodedContent(
      new Dictionary<string, string>() 
      { 
       {"username", "user"}, 
       {"password", "pwd"}, 
       {"login-form-type", "pwd"} 
      } 
     ) 
    ).Result; 
    // Now access our resource 
    var webserviceResult = httpClient.GetAsync("http://webseal/webservice").Result; 
} 

如果不工作,你可能需要通過WebSEAL以獲取Cookie的回報和跨越每一次發送的cookie。