web開發已經流行了不少年,登陸與受權也基本有一套通用的流程,下面是我本身經常使用的登陸與受權方式,歡迎你們討論與吐槽.web
概念:
登陸是過程,受權是結果.登陸只是爲了得到頁面的訪問權限 or 操做權限 or 數據權限 or api調用權限.數據庫
登陸受權分爲兩個域:用戶域和權限域.api
用戶域:用戶信息,角色信息。
用戶信息:登陸賬號,登陸密碼,用戶名,角色,機構,部門等。
角色信息:角色名,機構,部門等。緩存
權限域:模塊信息,權限信息,角色權限。
模塊信息:應用中的一個功能塊,能夠是一個頁面(api),也能夠是多個頁面(api),擁有惟一標識。
權限信息:模塊裏的功能單元,好比增、刪、改、查等。
角色權限:保存角色擁有的權限信息。安全
登陸:
登陸一般是用戶輸入帳號、密碼、驗證碼而後提交表單進行身份校驗而後保存受權信息,如今還有掃碼登陸。
保存受權信息:
Cookie:把用戶信息加密後保存在Cookie中。
Session:登陸成功後在Cookie裏保存SessionId和用戶標識。
對比:
Cookie:
優勢:不佔服務器資源(Cpu資源除外,由於若是信息量大,解密過程很耗資源),使用方便。
缺點:容量有限且不安全。
Session:目前流行的是使用緩存數據庫來充當Session服務,例如Redis和Memcache.
優勢:
一、容量可根據需求無限拓展,能夠很方便的創建獨立的登陸受權中心。
二、相較於Cookie,數據很是安全,SessionId是隨機和易變的,只有SessionId對應的session信息和用戶標識全匹配纔算成功。
三、能夠很方便拓展成獨立的登陸中心以實現統一登陸。服務器
缺點:過程稍微複雜。session
受權:
受權發生在功能模塊的入口處,流程以下。
一、獲取用戶的登陸信息(from Cookie or Session)。
二、經過模塊模塊惟一標識和用戶角色信息獲取當前用戶在當前模塊的權限。
三、把用戶當前模塊的權限信息寫入上下文(HttpContext)中(避免一個請求屢次讀取權限信息,後面的操做就能夠直接從上下文中獲取)加密