**15.app後端怎麼設計使用者登入方案(API許可權安全)
在很多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/
相關文章
- MYSQL 開啟root遠端登入許可權MySql
- Linux賬號安全——使用者登陸許可權Linux
- windows10許可權怎麼設定_win10設定使用者許可權的方法WindowsWin10
- 使用者許可權設計(三)——通用資料許可權管理系統設計
- Linux 使用者ssh登入許可權檢查Linux
- 客戶端使用sysdba許可權登入資料庫客戶端資料庫
- mysql8下建立使用者遠端登陸許可權MySql
- 使用 Laravel5.7 許可權管理系統後臺及前後臺使用者登入Laravel
- 01【若依框架】 登入許可權框架
- 系統許可權資料庫設計方案資料庫
- 後臺登入提示:”登入失敗:資料庫目錄寫入許可權不足!“資料庫
- “要登入到這臺遠端計算機,您必須被授予允許透過終端服務登入的許可權。”計算機
- ORACLE 觸發器控制使用者登入之許可權限制Oracle觸發器
- Windows2008遠端登陸時提示”要登入到此遠端計算機,您必須被授予允許通過終端登入登入的許可權”Windows計算機
- 單點登入與許可權管理本質:cookie安全問題Cookie
- java中怎麼設定檔案許可權Java
- PbootCMS後臺登入提示:“登入失敗:資料庫目錄寫入許可權不足!”boot資料庫
- PbootCMS後臺登入提示:”登入失敗:資料庫目錄寫入許可權不足!“boot資料庫
- ORACLE軟體克隆完成後sysdba登入提示沒有許可權Oracle
- 許可權系統:許可權應用服務設計
- 後臺許可權設計問題,請教思路
- JavaWeb許可權設計原理JavaWeb
- 許可權系統設計
- 入門MySQL——使用者與許可權MySql
- MySQL入門--使用者與許可權MySql
- 金山文件怎麼設定編輯許可權 金山文件線上編輯許可權設定
- ASP.NET系統使用者許可權設計ASP.NET
- win10登錄檔無許可權開啟怎麼辦Win10
- 許可權系統:6個許可權概念模型設計模型
- 許可權系統:許可權應用服務設計Tu
- Oracle 使用者、物件許可權、系統許可權Oracle物件
- MySQL資料庫許可權體系入門(3)---管理使用者許可權MySql資料庫
- 前端如何配合後端完成RBAC許可權控制前端後端
- Oracle限制具備資料庫超級管理員(SYSDBA)許可權的使用者遠端登入Oracle資料庫
- NAS使用者許可權的設定
- 使用者許可權繼承另一使用者的許可權繼承
- 授權許可權服務設計解析
- win10修改登錄檔沒有許可權怎麼辦 win10系統下修改登錄檔許可權的方法Win10