2012-11-27 91 views
6

我的應用程序需要訪問運行在不同服務器上的REST風格的Web服務。該Web服務使用CAS認證,當通過瀏覽器使用時,如果用戶尚未通過認證,它將重定向到CAS登錄。沒有辦法通過CAS實際登錄。我的應用程序還使用CAS,因此用戶將通過身份驗證REST風格的Web服務的CAS認證

我想通過JQuery/Ajax訪問它,但服務器似乎沒有爲JSONP配置,我知道這是因爲跨域問題。

現在,我可以通過我的服務器發出Ajax請求,而這會導致我的問題:沒有CAS登錄方法供我的服務器調用,如何'告訴'Web服務用戶已通過身份驗證?

因此,我想首先明確一下瀏覽器,CAS和RESTful服務之間發生了什麼,以及如何在沒有任何證書顯式傳遞的情況下處理授權。其次,我想知道如何在從我的服務器調用服務時複製該服務器 - 它不會與來自瀏覽器的請求具有相同的會話,因此不會有CAS授權令牌,但我不會看看如何獲​​得或提供它。

+1

當你說「...通過我的服務器發出Ajax請求...」時,你的意思是通過HTTP請求向Web服務發出請求嗎?也許你會知道你的服務器應用程序的編寫語言。 –

+0

嗨,保羅 - 是的,HTTP請求就是我的意思,服務器是Java。 – user814425

+0

所以現在看起來CAS框架支持某種應用程序範圍的身份驗證,我認爲這意味着我應該可以讓我的servlet生成HttpRequest並進行身份驗證。這雖然不起作用,我想我需要對org.jasig.cas.client做些什麼,但我不太明白這應該是什麼。任何建議仍然感激! – user814425

回答

5

問題1如何在作品中的認證/單點登錄:
當你登錄CAS服務器(比如security.example.com)將設定爲域在瀏覽器cookie中security.example.com 。當你通過瀏覽器訪問使用標準CAS認證和驗證過濾器的應用程序加密文件一個典型的流程是這樣的:

  1. 爲應用程序配置檢查,如果用戶對象是在會話CAS認證過濾器。如果是,則用戶通過
  2. 如果不是,CAS認證過濾器將瀏覽器重定向到CAS登錄頁面。在單一登錄場景中,CAS服務器識別其自己的cookie,檢查應用程序是否已註冊並參與單點登錄 - 如果是,則將瀏覽器重定向到具有服務票證的應用程序。
  3. 應用配置CAS驗證過濾器識別服務票據和接觸CAS服務器用於驗證車票和創建斷言對象

這整個流程工作,你需要cookies和會話處理工作。

有關如何在服務器端處理身份驗證問題2:
我們在我們的應用程序也有類似的問題,並使用兩種不同的方式來解決它:

  1. 使用的內部系統用戶並使用基本身份驗證標頭對服務器進行服務器訪問,以傳遞此用戶的憑據。當然,您需要配置適當的過濾器來處理具有基本身份驗證令牌的非交互式登錄。這很容易實現,但有明顯的缺點,如有這個特殊的系統用戶,您的應用程序看到用戶密碼等。
  2. 使用proxy authentication。在這種方法中,當您的用戶通過application1身份驗證時,它還會生成一個代理票證以供application2(服務器到服務器調用)使用。此代理票證可以在服務器之間傳遞到服務器通信,以便application1代表用戶訪問應用程序2
2

在我的一個項目中使用這樣的設置。 一些CAS實現通過休息呼叫啓用授權。 嘗試添加基本授權標頭(用戶名和密碼的基礎64編碼)。 它看起來是這樣的

頁眉(「授權」,「基本」)

同時嘗試使用Mozilla的REST客戶端來訪問REST API進行調試。它會幫助你理解各種頭文件等。