摘要:微信提供了作為識別用戶身份的憑證,可以結合設計一套用戶身份權限認證機制。認證免疫跨站請求偽造,而認證則存在遭受的可能性。此處的是引導用戶進入授權頁面后微信服務器附加上去的,詳細方法見微信公眾平臺的微信授權網頁文檔。
項目背景
最近在開發一個微信公眾號商城,在調用下單、支付、查詢訂單等等接口時,需要驗證用戶的身份。微信提供了openid作為識別用戶身份的憑證,可以結合openid設計一套用戶身份權限認證機制。考慮到安全性和易實現程度,備選的方案有Session認證機制和Token認證機制,本文在比較了兩者的特點后選擇了Token認證機制,然后詳細闡述了如何實現Token認證機制。
接口設計在尋找合適的認證方式之前,先說明一下項目前后端的設計。項目的前后端是分離的,前端使用AJAX的方式向后端請求操作資源(增、刪、改);后端接口設計遵循RESTful API原則,結果以JSON格式返回。
身份認證備選方案 Session認證在web網站中,session可以將訪客狀態記錄在服務器中,并分配一個唯一的session id給訪客,并將該id附加在headers中返回給客戶端。客戶端接收到session id后,會將id存儲在cookie,之后客戶端每次訪問服務器,傳送的cookie中都會攜帶session id,服務器以此來識別訪客的身份。
token認證方式中客戶端和服務器的交互過程與session的類似,客戶端向服務端請求token,拿到token后,客戶端可以在之后的請求中將token附加在header,以驗證用戶的身份和權限。
【此處應該列舉諸多不同,但是一定要提到為什么token更適合,而不是session】
token認證更靈活。對于session認證,客戶端每次發送求情都會發送cookie;而對于token認證,可以在需要身份驗證的場景下才發送token。
token允許多域名認證。cookie是綁定單域名的,在a域名生成的cookie無法用于b域名,所以session id無法作為不同域名的共同認證id。而token認證則不受限制,token可以附加在任何請求上。
在客戶端的存儲方式不同。session自動存儲在cookie,而token則需要定義存儲的方式。token通常可以存儲在localStorage(永久存儲,瀏覽器關閉時不清除token)、sessionStorage(瀏覽器關閉時token會被清除)、cookie。值得一提的是,即使將token存儲在cookie,也可以免疫CSRF,因為cookie中的token并不用于認證。
CSRF(跨站請求偽造)。認證免疫CSRF(跨站請求偽造),而session認證則存在遭受CSRF的可能性。
跨站腳本攻擊(XSS)。相對于session認證,token認證更容易遭受跨站腳本攻擊(XSS)。
本項目考慮到Token認證機制更靈活,例如token可以控制是否附加在請求、token本身可以進行自定義加密、可以將token存儲在cookie以外的地方,所以選定Token認證機制作為商城應用的用戶身份權限認證機制。
獲取token的流程客戶端向服務端token接口提交code,請求獲取token。此處的code是引導用戶進入授權頁面后微信服務器附加上去的,詳細方法見微信公眾平臺的微信授權網頁文檔。
服務端通過code向微信公眾平臺換取用戶的openid。微信授權網頁有兩種授權scope,本項目只需要用戶的openid,不需要用戶更多的信息,所以將scope設為snsapi_base。
微信公眾平臺向服務端返回了openid等等信息。
服務端生成token,將token和用戶信息以鍵值對的形式存儲后,服務端返回token給客戶端。
存儲token及用戶信息的流程服務端獲取用戶的openid后,在數據庫中登記用戶的信息,并取出用戶的id。
服務端以token為key,以openid、user id、權限信息等為value,將該鍵值對存入緩存中。在存入緩存時,注意設置緩存有效時間,過長的有效期存在安全隱患,對于本項目,用戶辦理業務后短時間內不會再訪問,所以將token的有效期設置為2小時。
調用接口時的token認證流程客戶端將token附加在header,向業務接口發送請求。
業務接口在執行業務邏輯前,憑token驗證用戶的身份。分別驗證以下三點:
token的合法性(有記錄)
token的有效性(沒過期)
Token對應的用戶權限Auth
總結 Token機制的特點使用靈活,可以選擇性認證。
可以多個域名使用同一token認證體系。
在客戶端的存儲靈活,除了存儲在cookie,還可以選擇localStorage、sessionStorage。
免疫CSRF(跨站請求偽造)。
Token認證機制的三個流程獲取Token的流程。
存儲Token及身份權限信息的流程。
調用接口時的Token認證流程。特別注意需要驗證token的合法性、時效性、關聯的用戶權限。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/28329.html
摘要:本文是淺析微信支付系列文章的第三篇,主要會講一下在開發前的一些注意事項。淺析微信支付系列已經更新兩篇了喲,沒有看過的朋友們可以看一下。開通微信支付需要注冊登陸微信商戶平臺,微信支付相關的信息都需要在這個平臺上進行操作。 本文是【淺析微信支付】系列文章的第三篇,主要會講一下在開發前的一些注意事項。 淺析微信支付系列已經更新兩篇了喲~,沒有看過的朋友們可以看一下。 淺析微信支付:前篇大綱...
摘要:時間年月日星期六說明本文部分內容均來自慕課網。第六章公眾號與開發平臺關聯公眾號與開放平臺關聯情景說明當使用端進行微信授權登錄時,得到的和公眾號授權登錄時得到的不一樣。 時間:2017年08月12日星期六說明:本文部分內容均來自慕課網。@慕課網:http://www.imooc.com教學源碼:無學習源碼:https://github.com/zccodere/s... 第一章:課程介紹...
摘要:自建網站對接微信公眾號微信公眾號技術平常我們有些寫各種網站個人博客系統物流管理系統通信錄管理系統校園二手網站我們都知道只需要租用一個服務器再配置一個備案好的域名就可以在瀏覽器上進行訪問了不知大家不知大家有沒有想過將你搭的網站對接微信公眾 title: 自建網站對接微信公眾號date: 2018-04-12 15:25tags: 微信公眾號, PHP codeigniter cat...
閱讀 995·2023-04-25 19:35
閱讀 2633·2021-11-22 09:34
閱讀 3679·2021-10-09 09:44
閱讀 1713·2021-09-22 15:25
閱讀 2932·2019-08-29 14:00
閱讀 3372·2019-08-29 11:01
閱讀 2596·2019-08-26 13:26
閱讀 1735·2019-08-23 18:08