Jwt建立身份令牌Token
最近再做一個的個人社群,首先就是解決登陸的問題。
根據最近的學習和網上看的資料,來做一下安全登入(純口述,程式碼後面附上)。
前端使用AngularJS,對於使用者的密碼是用RSA非對稱加密方式進行加密,對於RSA我最直白的印象就是
:沒有祕鑰的情況暴力破解可能性為0,相對RSA有深入瞭解的的可以自行百度。在我專案中就是前端傳送
請求的密碼進行RSA加密,服務端通過祕鑰進行解密,同資料庫中的密碼進行匹配,同時我的資料看中儲存
的密碼也是用MD5碼進行編碼的非明文儲存,為什麼這麼做,因為是供自己學習的專案,就多多實驗一些東西,
有不合理的地方還請指出。
當使用者匹配成功之後,我們會返回一個Token,我是如何理解Token的:當我們登入成功之後,為防避免下一次
再進行一次身份匹配的工作,我們將登入的資訊儲存到Token中,返回給前端,在使用者每次傳送請求的時候,
其請求頭都會帶著該Token,服務端在攔截器中對Token進行驗證,合法即放行。在瞭解Token的過程中我遇到
一些問題或者說發現一些問題:
單點登入:使用者登入的情況下,在另一個瀏覽器或者機器登入會獲取到一個新的Token,此時之前的Token在沒有
失效的情況下也應該失效,從而擠掉上一臺電腦的賬號。我最初想的是新使用者登入的時候,獲取上一次儲存在資料
庫中的token,然後setExpiration方法來使其過期,但是實驗過程中我發現,通過String型別解密成Claims類(jjwt maven 搜一下
然後將依賴加入到maven中,可以研究一下這些類以及如何生成Token)的時候
雖然可以setExpiration,但是其Token仍然是可用的,直到你在建立的時候設定的過期時間到了才會失效。只有你在JwtBuilder物件
裡面setExpiration才是真正有效的,想過吧物件儲存起來,但是jar中的類沒有序列化,所以各種操作都失敗了,最終我只能這樣解決:
客戶每一次傳送請求的時候,Token都和資料庫中的token進行一次比較,相同則說明沒有在其他地方登入,不相同則說明有新的token生成
也就是有在其他地方登陸,強制下線,阻斷請求。但是由於進行資料庫查詢操作,我總感覺很不爽。。。。但是目前我沒有別的辦法,歡迎
留言指導。
安全的問題,我想的是,如果請求頭被擷取,那麼跨站偽造請求怎麼處理。雖然我所瞭解的,如果請求頭都被獲取了,說明使用者電腦安全存在問題
基本上是無解(受個人知識所限,有問題多多指教,後面就不在重複這句話了,哈哈),我還是想到一個方案但是被自己推翻了,就是每次請求
都重新整理token,當使用者token被截獲,那麼重新整理出的token會使上一個token失效,進而告知使用者修改密碼或者其他挽回措施,但是我想了想有問題,
如果使用者沒有獲取到修改密碼的通知,或者不能及時獲取,黑客不斷的重新整理token,那理論上這段時間裡面他可以一直登陸,一直操作,直到
使用者收到通知,所以權衡一下,還是設定過期時間,過期重新登陸比較穩定一點,沒有太多其他因素干擾。
相關文章
- JWT 令牌JWT
- 【Azure Developer】如何驗證 Azure AD的JWT Token (JSON Web 令牌)?DeveloperJWTJSONWeb
- 安全令牌JWTJWT
- JWT TokenJWT
- spring security oauth2搭建resource-server demo及token改造成JWT令牌SpringOAuthServerJWT
- JWT(Json WEB Token)JWTJSONWeb
- 什麼是Cookie、令牌與JWT?CookieJWT
- jwt生成token和token解析基礎JWT
- ASP.NET Web API 2系列(四):基於JWT的token身份認證方案ASP.NETWebAPIJWT
- jwt生成token報錯JWT
- SpringBoot 整合 JWT 實現 token 驗證,token 登出Spring BootJWT
- 令牌Token和會話Session原理與攻略會話Session
- Spring Boot中使用token:jwtSpring BootJWT
- JSON Web Token(JWT) 簡介JSONWebJWT
- token 會話設計 (JWT)會話JWT
- 譯見|構建使用者管理微服務(五):使用 JWT 令牌和 Spring Security 來實現身份驗證微服務JWTSpring
- OAuth2.0實戰!使用JWT令牌認證!OAuthJWT
- jwt token 重新整理問題JWT
- Composer 使用 JWT 生成 TOKEN 例項JWT
- SpringBoot整合JWT做身份驗證Spring BootJWT
- 會話、cookie、JWT、令牌、SSO和OAuth 2.0簡介會話CookieJWTOAuth
- JWT 快速為使用者生成 tokenJWT
- 一文搞懂Cookie,Session,Token,JWTCookieSessionJWT
- 【網路傳輸】Cookie、Session、Token、JWTCookieSessionJWT
- 一文搞懂 Cookie,Session,Token,JWTCookieSessionJWT
- 簡聊 Session 與 Token 身份驗證Session
- Rust中實現JWT身份驗證RustJWT
- 使用 JWT 認證使用者身份JWT
- 暢購商城(八):微服務閘道器和JWT令牌微服務JWT
- JWT令牌生成採用非對稱加密演算法JWT加密演算法
- springboot+jwt做api的token認證Spring BootJWTAPI
- Spring Boot使用JWT進行token驗證Spring BootJWT
- DRF之JWT簽發Token原始碼分析JWT原始碼
- 不要用JWT替代session管理(上):全面瞭解Token,JWT,OAuth,SAML,SSOJWTSessionOAuth
- go-kit微服務:JWT身份認證Go微服務JWT
- PHP 使用 jwt 使用者身份認證PHPJWT
- 高可用之限流-07-token bucket 令牌桶演算法演算法
- 還不會使用JWT格式化OAuth2令牌嗎?JWTOAuth
- Spring Security OAuth2.0認證授權三:使用JWT令牌SpringOAuthJWT