**15.app後端怎麼設計使用者登入方案(API許可權安全)

suboysugar發表於2015-03-17

在很多app中,都需要使用者的登入操作。登入,就需要用到使用者名稱和密碼。為了安全起見,暴露明文密碼的次數越少越好。怎麼能最大程度避免洩露使用者的密碼呢?在登入後,app後端怎麼去驗證和維持使用者的登入狀態呢?在本文中,給出了一套使用者登入的解決方案,以供大家參考。

1. 保證登入的安全性,最起碼要使用https協議

  避免資訊的洩露,最簡單的方案是所有涉及到安全性的api請求,都必須要使用https協議。

  HTTPS(Secure Hypertext Transfer Protocol)安全超文字傳輸協議

  它是一個安全通訊通道,它基於HTTP開發,用於在客戶計算機和伺服器之間交換資訊。它使用安全套接字層(SSL)進行資訊交換,簡單來說它是HTTP的安全版。它是由Netscape開發並內建於其瀏覽器中,用於對資料進行壓縮和解壓操作,並返回網路上傳送回的結果。HTTPS實際上應用了Netscape的安 全全套接字層(SSL)作為HTTP應用層的子層。

  http是超文字傳輸協議,資訊是明文傳輸,https 則是具有安全性的ssl加密傳輸協議。

  注意了,https協議需要到ca申請證書,一般免費證書很少,需要交費。

  我們可以看看所有大型網站,例如京東,淘寶,支付寶,涉及到登入和支付的頁面,url都是以https開頭,這就意味著,這次通訊是使用https。開放平臺的api,例如新浪微博,騰訊等,api請求都是以https開頭的。https是業界常用的保證安全性的協議。

  因此,涉及安全問題的api,都應該使用https協議。雖然,https為了保證安全性,在效率上是比http協議低。

2. 基本的使用者登入方案

  在傳統的web網站中,可以使用cookie+session來實現使用者的登入維護,那麼在app後端,可以怎麼實現呢?

  在app後端,怎麼避免每次驗證使用者身份都需要傳輸使用者名稱和密碼呢?

  一個生活的模型就是:

  假設伺服器是個房間,裡面有個房間管理員,房間上的門有把鎖,這把鎖有兩種開啟方式:

  1. 輸入了這把鎖上註冊的使用者名稱和密碼,就能開啟

  2. 用房間管理員提供的鑰匙開啟

  a.當第一次使用使用者名稱和密碼開啟了這把鎖後,進入房間,找到房間管理員,讓他提供一把鑰匙。

  b.那以後每次需要進入這個房間,就用這把鑰匙就行了,不用擔心旁邊有人偷看到自己的使用者名稱和密碼.

  c.決定有一段時間不進入這個房間,又怕鑰匙被偷,就進入房間裡,把鑰匙還給管理員,讓管理員把鑰匙毀滅

  a就是登入的操作,b就是驗證身份的操作,c就是退出登入的操作.

  理論版的描述如下:

  (1) 伺服器接收到app傳送的使用者名稱和密碼後,驗證使用者名稱和密碼是否正確。

  如果錯誤則返回錯誤資訊。

  如果驗證正確,生成一個隨機的不重複的token字串(例如”daf32da456hfdh”),在redis或memcache中維護一個映視表,建立token字串和使用者資訊的對應關係表,例如,把token字串”daf32da456hfdh”和使用者id”5″對應起來。

  (2) 伺服器把token字串返回給app,app把這個token字串儲存起來,作為登入的驗證。

  (3) 當需要驗證使用者身份的操作時,必須要把token字串傳給伺服器驗證身份。

  例如,api “test.com/user/update”是更新使用者的資訊,必須要驗證使用者的身份.當呼叫api “test.com/user/update”時,把token字串”daf32da456hfdh”放在url上,變成”test.com/user/update?token=daf32da456hfdh” .

  當伺服器接收到這個api請求,知道要驗證使用者身份的,於是,就把引數中token的值”daf32da456hfdh”取出來,在(1)中建立的token字串和使用者資訊的對應關係表查詢,如果發現沒這個token值的,則返回驗證失敗的資訊。如果發現有這個token值,則獲取這個使用者的資訊,進行相關的更新操作。

  (4) 當使用者退出登入時,需要通過呼叫api,讓伺服器把這個使用者對於的token字串刪除.

  例如,api “test.com/user/logout”是退出登入的api,也要驗證使用者身份, 則呼叫”test.com/user/logout?token=daf32da456hfdh” 。當伺服器接到退出登入的api請求時,在(1)中建立的token字串和使用者資訊的對應關係表查詢token字串,把token和使用者資訊都刪除即可。

  注意:這個方案並不是十分安全,這個身份驗證是依賴於token字串。如果使用者洩漏了自己的url, 那很大程度上token也被別人洩漏了,就相當於鑰匙被人複製了一份。在下篇的通訊安全中,會描述一個防止token在通訊中洩漏的方案。

 

注:當TOKEN過期了怎麼辦?

一般TOKEN需要儲存幾個月,當過期了之後,讓使用者重新登入,輸入密碼,重新獲取TOKEN

 

http://blog.csdn.net/newjueqi/article/details/44062849

如何聯絡我:【萬里虎】www.bravetiger.cn
【QQ】3396726884 (諮詢問題100元起,幫助解決問題500元起)
【部落格】http://www.cnblogs.com/kenshinobiy/


相關文章