Ⅰ 程序員應該如何設計更優雅的Token認證方式
把認證信息保存在客戶端,關鍵點就是安全的驗證,如果能解決認證信息的安全性問題,完全可以把認證信息保存在客戶端,服務端完全無認證狀態,這樣的話服務端擴展起來要方便很多。關於信息的安全解決方案,現在普遍的做法就是簽名機制,像微信公眾介面的驗證方式就基於簽名機制。簽名,就是只有信息的發送者才能產生的別人無法偽造的一段數字串,這段數字串同時也是對信息的發送者發送信息真實性的一個有效證明。當用戶成功登系統並成功驗證有效之後,伺服器會利用某種機制產生一個token字元串,這個token中可以包含很多信息,例如來源IP,過期時間,用戶信息等, 把這個字元串下發給客戶端,客戶端在之後的每次請求
4.適用性更廣:只要是支持http協議的客戶端,就可以使用token認證。
5.服務端只需要驗證token的安全,不必再去獲取登錄用戶信息,因為用戶的登錄信息已經在token信息中。
6.基於標准化:你的API可以採用標准化的 JSON Web Token (JWT). 這個標准已經存在多個後端庫(.NET, Ruby, Java,Python,PHP)和多家公司的支持(如:Firebase,Google, Microsoft).
Ⅱ 澶у﹀叚縐嶇▼搴忓憳瀹炵敤綆楁硶鎺ㄨ崘
紼嬪簭鍛樺疄鐢ㄧ畻娉曟湁鐢ㄦ帹鑽
綆楁硶涓: 蹇閫熸帓搴忕畻娉
蹇閫熸帓搴忔槸鐢變笢灝悸烽湇灝旀墍鍙戝睍鐨勪竴縐嶆帓搴忕畻娉曘傚湪騫沖潎鐘跺喌涓嬶紝鎺掑簭 n 涓欏圭洰瑕丱(nlog n)嬈℃瘮杈冦傚湪鏈鍧忕姸鍐典笅鍒欓渶瑕丱(n2)嬈℃瘮杈冿紝浣嗚繖縐嶇姸鍐靛苟涓嶅父瑙併備簨瀹炰笂錛屽揩閫熸帓搴忛氬父鏄庢樉姣斿叾浠朞(n log n) 綆楁硶鏇村揩錛屽洜涓哄畠鐨勫唴閮ㄥ驚鐜 (inner loop)鍙浠ュ湪澶ч儴鍒嗙殑鏋舵瀯涓婂緢鏈夋晥鐜囧湴琚瀹炵幇鍑烘潵銆
蹇閫熸帓搴忎嬌鐢ㄥ垎娌繪硶絳栫暐鏉ユ妸涓涓涓茶(list)鍒嗕負涓や釜瀛愪覆琛(sub-lists)銆
綆楁硶浜: 鍫嗘帓搴忕畻娉
鍫嗘帓搴(Heapsort)鏄鎸囧埄鐢ㄥ爢榪欑嶆暟鎹緇撴瀯鎵璁捐$殑涓縐嶆帓搴忕畻娉曘傚爢縐鏄涓涓榪戜技瀹屽叏浜屽弶鏍戠殑緇撴瀯錛屽苟鍚屾椂婊¤凍鍫嗙Н鐨勬ц川:鍗沖瓙緇撶偣鐨勯敭鍊兼垨緔㈠紩鎬繪槸灝忎簬(鎴栬呭ぇ浜)瀹冪殑鐖惰妭鐐廣
鍫嗘帓搴忕殑騫沖潎鏃墮棿澶嶆潅搴︿負O(nlogn)
綆楁硶涓: 褰掑苟鎺掑簭
褰掑苟鎺掑簭(Merge sort錛屽彴婀捐瘧浣:鍚堝苟鎺掑簭)鏄寤虹珛鍦ㄥ綊婢′綔涓婄殑涓縐嶆湁鏁堢殑鎺掑簭綆楁硶銆傝ョ畻娉曟槸閲囩敤鍒嗘不娉(Divide andConquer)鐨勪竴涓闈炲父鍏稿瀷鐨勫簲鐢ㄣ
綆楁硶鍥:浜屽垎鏌ユ壘綆楁硶
浜屽垎鏌ユ壘綆楁硶鏄涓縐嶅湪鏈夊簭鏁扮粍涓鏌ユ壘鏌愪竴鐗瑰畾鍏冪礌鐨勬悳緔㈢畻娉曘傛悳緔犺繃紼嬩粠鏁扮粍鐨勪腑闂村厓緔犲紑濮嬶紝濡傛灉涓闂村厓緔犳eソ鏄瑕佹煡鎵劇殑鍏冪礌錛屽垯鎼滅礌榪囩▼緇撴潫:濡傛灉鏌愪竴鐗 瀹氬厓緔犲ぇ騫叉垨鑰呭皬騫蹭腑闂村厓緔狅紝鍒欏湪鏁扮粍澶т簬鎴栧皬騫蹭腑闂村厓緔犵殑閭d竴鍗婁腑鏌ユ壘錛岃屼笖璺熷紑濮嬩竴鏍蜂粠涓闂村厓緔犲紑濮嬫瘮杈冦傚傛灉鍦ㄦ煇涓姝ラゆ暟緇勪負絀猴紝鍒欎唬琛ㄦ壘涓嶅埌銆傝繖 縐嶆悳緔㈢畻娉曟瘡涓嬈℃瘮杈冮兘浣挎悳緔㈣寖鍥寸緝灝忎竴鍗娿傛姌鍗婃悳緔㈡瘡嬈℃妸鎼滅儲鍖哄煙鍑忓皯涓鍗婏紝鏃墮棿澶嶆潅搴︿負O(logn) 銆
綆楁硶浜: BFPRT(綰挎ф煡鎵劇畻娉)
BFPRT綆楁硶瑙e喅鐨勯棶棰樺嶮鍒嗙粡鍏革紝鍗充粠鏌恘涓鍏冪礌鐨勫簭鍒椾腑閫夊嚭絎琸澶(絎琸灝)鐨勫厓緔狅紝閫氳繃宸у欑殑鍒嗘瀽錛孊FPRT鍙浠ヤ繚璇佸湪鏈鍧忔儏鍐典笅浠嶄負綰挎ф椂闂村嶆潅搴︺傝ョ畻 娉曠殑鎬濇兂涓庡揩閫熸帓搴忔濇兂鐩鎬技錛屽綋鐒訛紝涓轟嬌寰楃畻娉曞湪鏈鍧忔儏鍐典笅錛屼緷鐒惰兘杈懼埌o(n)鐨勬椂闂村嶆潅搴︼紝浜斾綅綆楁硶浣滆呭仛浜嗙簿濡欑殑澶勭悊銆
綆楁硶鍏: BFS(騫垮害浼樺厛鎼滅儲)
騫垮害浼樺厛鎼滅儲綆楁硶(Breadth-First-Search)錛屾槸涓縐嶅浘褰㈡悳緔㈢畻娉曘傜畝鍗曠殑璇碆FS鏄浠庢牴鑺傜偣寮濮嬶紝媧葷潃鏍(鍥)鐨勫藉害閬嶅巻鏍(鍥)鐨勮妭鐐廣傚傛灉鎵鏈夎妭鐐瑰潎琚璁塊棶錛屽垯綆楁硶涓姝銆侭FS鍚屾牱灞炰簬鐩茬洰鎼滅儲銆備竴鑸鐢ㄩ槦鍒楁暟鎹緇撴瀯鏉ヨ緟鍔╁疄鐜癇FS綆楁硶銆