身份驗證

目前比較成熟的Web服務認證方式有HTTP認證、自定義認證、采用現有工具包。
利用Web服務可以建立面向服務的架構(SOA,Service-oriented architecture),即不用改變應用,利用Web服務的消息驅動機制,讓分布式系統協同工作。
安全的Web服務需要保證以下5項安全性要求:
a.認證:提供某個實體(人或者系統)的身份的保證
b.授權:保護資源以免對其進行非法的使用和操作
c.機密性:保護信息不被泄漏或暴露給未授權的實體
d.完整性:保護數據以防止未授權的改變、刪除或替代
e.不可否認性:防止參與某次通信交換的一方事后否認本次交換曾經發生過。
在實際應用中,完整的滿足上述 5 項要求對于普通的 Web 服務應用太過復雜,同時也太浪費資源。目前 Internet 上的公共 Web 服務,對于一般的安全性要求,只需滿足上述 1、2 兩項要求即可。對于授權,也是通過認證后的用戶身份,進行相應的權限分配。

1、HTTP認證

對于公共的 Web 服務,可以采用和 HTTP 服務一樣的集中安全方式,包括基本(Basic)、摘要(Digest)、集成(Integrated)和基于證書的(Client Certificate)的認證機制。

1.1 基本認證(Basic)

基本認證是服務器直接驗證客戶端提供的明文用戶名和密碼是否和保存的用戶信息相匹配的,如果匹配則通過認證。其優點是算法最簡單,資源占用少,認證只需要 1 個來回;缺點是不安全,密碼是經過簡單的 Base64 編碼明文傳送,如果需要安全性則需要采用安全套接層協議 HTTPS。

1.2 摘要認證(Digest)

比基本認證稍微難一點實現,但也只需要一個來回的認證。密碼不再是明文傳送,而是傳送密碼及其他信息綜合后生成的哈希值,因此這種認證方式不需要傳送加密。它的優點是密碼不用明文傳輸,比較安全;服務器端可以通過一定的哈希值生成算法在一定程度上抵制黑客攻擊。它的缺點是算法比較復雜,實現起來比較麻煩。

1.3 集成 Windows 身份認證(Integrated)

集成認證又分為 NTLM 和 Kerberos2 種。NTLM認證方式需要把用戶的 Windows 用戶名和密碼傳送到服務端,服務端認證用戶名和密碼是否和服務器的此用戶的信息一致。用戶名用明碼傳送,但是密碼是經過處理后派生出的一個 8 字節的密鑰加密后傳送。Kerberos 認證方式只把客戶端訪問 IIS 的認證票(Ticket)發送到 IIS 服務器,IIS 收到這個票據就能確定
客戶端的身份,不需要傳送用戶的密碼。需要kerberos 認證的用戶一定是域用戶。
雖然集成認證安全性比較高,但其只適用于Intranet 和 Windows 客戶端,而且采用的用戶信息是用戶當前登錄的 Windows 帳戶信息,所以在
Internet 上實用性不高。

1.4 客戶端證書認證(Client Certificate)

對于安全要求特別高的環境,可以使用客戶端證書認證。客戶端證書為 Web 應用程序提供了一種出色的身份認證機制。瀏覽器或其他客戶端應用程序必須提供有效的證書才能被授予對應用程序的訪問權,從而使客戶端無需再提供用戶名和密碼。這就使得在創建由其他客戶端應用程序訪問的安全 Web服務時,客戶端證書非常有用。
但是這種方式需要證書服務器的支持,而且比摘要認證復雜的多,而且十分消耗資源。雖然安全性很高,但對于一般程序,實用性不高。

2、自定義認證

自定義安全是采用自己定義的接口,來認證用戶的身份。Web 服務公開認證接口,定義認證 API,客戶端則按照 Web 服務的公開信息來實現認證。這種方式的優點是靈活,服務器端可以隨意定義各種認證所需要的接口和算法,而不必拘泥于現有方法。
客戶端必須首先學習所需要使用的 Web 服務的認證接口,才能使用服務。而且每個 Web 服務都有其自己的認證方式,導致通用性不高。

2.1 SOAP header 方式[2]

這種方式是用 SOAP 頭來攜帶憑據信息。這種方式原理上是好的,而且 WS-Security 也是這么做的。它允許獨立傳送,允許加密密碼或者直接傳送 Hash憑據而不需要加密整個信息。但是缺點是客戶端必須閱讀 Web 服務的 API 文檔才知道該怎么做,以手工的方式小心的以所要求的格式構建 SOAP 頭,導致開發難度增大。而且,以 SOAP header 方式必須在每次Web 服務調用上都附加相應的用戶憑據,同時服務器也得每次都進行認證,比較浪費資源。

2.2 登錄方式

把 Web 服務看作是房子,把 Web 服務的認證看作是房子的門。房子允許很多人進入,但進入之前,必須要敲門。登錄認證就是為了確保使用 Web 服務的人就是所宣稱的那個人。這扇門需要用戶提供憑據,然后他們會得到一個安全令牌以訪問服務器。服務器返回的安全令牌可以有很多種方式,可以是保存在瀏覽器中的 Cookie,保存在服務器上的 Session Id 或者是一串字符。
登錄方式是在使用一個 Web 服務之前,先用登錄信息調用一個 Web 服務附屬的登錄方法,如果登錄成功,則得到一個每次使用 Web 服務都要用的令牌。每次使用 Web 服務時,在 SOAP Header 或者參數中攜帶這個令牌。這種方式的優點是不用每次調用 Web 服務都需要傳輸憑據信息,而只需要認證一次。缺點則是對于每一個單獨的 Web 服務,它需要
2 個來回(如果需要登出以便清理會話(Session)則需要 3 個來回);而且 Web 服務需要實現會話模型,這比無會話模型困難。

3、采用現有工具包

3.1 Web Services Enhancements

WS-Security 是一種為了保證 Web 服務安全所定義的通信協議,其完整的實現了上文所提到 5 種安全性要求。微軟的 Web Services Enhancements 工具包實現了 WS-Security 標準。但使用這種工具包,學習過程異常復雜,而且作為一個系統,即使只需要其中的一小塊功能,也需要學習整個工具包的使用,導致實現過程漫長。而且,使用工具包的后果就是,會導致客戶端越來越依賴工具包的黑箱實現,如果正常,一切都好;如果不正常,一個小問題就會破壞整個系統。這對于一般的對安全要求不高的 Web 服務來說,得不償失。

3.2 Microsoft Windows Live ID

Microsoft Windows Live ID 認證是 Microsoft Windows Live 系統(以前稱作 Passport)采用的一種認證方式,微軟使用它提供了一種“單點登錄”服務,它允許用戶使用一個賬戶就可以登錄多個 Web 網站,在系統內部,
這些憑據以 cookies 的形式存在。這種方式在ASP.NET 上容易簡單實現,但缺點是通用性較差,是過于復雜,實現困難。而且,不具有開放性,用戶信息保存在 Microsoft 的數據庫中,不利于特定需求的擴展。

3.3 Liberty Alliance Project

Liberty 是一個商業聯盟,成立于 2001 年 9 月,目標是建立一個統一的身份管理的開放標準。它也支持單點登錄。其相對于 Microsoft Live ID的優點是其是開放的。

現有的Google Web服務
Google 的 Web 服務包括存取 Google 帳戶信息的 Google Data APIs 和簡單使用 Google 服務的Web 服務。Google Data APIs 允許用戶在自己的程序中登錄 Google 帳號。一旦登錄,Google 返回一個令牌,每次用戶存取帳戶信息的時候都需要用到這個令牌。令牌在一段時間內有效。它根據客戶端類別分為單用戶桌面程序和多用戶 Web 程序。單用戶桌面程
序首先 Post 用戶信息到 https://www.google.com/accounts/ClientLogin,如成功登錄,得到令牌。以后每次對 API 的請求,HTTP 頭上都要附加令
牌信息。格式為 Authorization: GoogleLoginauth=yourAuthToken。多用戶 Web 程序可以采用AuthSub 和 OAuth 2 種方式進行認證。OAuth 是為
了保證安全 API 認證定義的一套開放標準,Google Data API 實現了這套標準。AuthSub 則是在 OAuth出現之前的認證方式。
如果不需要存取帳戶信息,只是簡單使用 Google服務的 Web 服務,例如 Google 地圖,則使用序列號(API Key)方式,每個需要使用 Web 服務的客戶端都申請一個序列號,每次使用時,需要攜帶序列號信息。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,527評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,687評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,640評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,957評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,682評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,011評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,009評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,183評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,714評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,435評論 3 359
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,665評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,148評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,838評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,251評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,588評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,379評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,627評論 2 380

推薦閱讀更多精彩內容