關於安全登入流程的設計

2021-07-13 14:13:08 字數 2618 閱讀 3479

###用到的名詞解釋###

ouid : 為生成s2存在,md5(uid)

s0 : pwd  (就是使用者的密碼)

s1 : md5(s0)

s2 : md5(s1,ouid) (db中儲存的密碼)

tg1: 客戶端生成的動態秘鑰(客戶端自定義?)

tg2: 客戶端首次提交給伺服器含有tg1的串,tg2=tea(s2, )

tg3: 服務端根據 password 解密出tg1,生成 token 和 refresh token 後用 tg1加密返回給客戶端 tg3 = tea(tg1,)

token : login成功之後生成的票據憑證,每次請求都會帶上

refresh token : login 成功之後生成的票據,token失效並且refresh token 有效的前提下能生成新的 token 和 refresh token

###########

1、password+(uid/mobile/email)登入

登入的時候採用如下的換票流程:

客戶端:自己維護動態的加密密令 tg1,使用者輸入 手機號和password,手機號通過介面轉換成 ouid,通過password+ouid 生成客戶端的 s2,最後生成 tg2

login 介面 接受 傳參:

tg_token : tg2

mobile:  mobile

login 介面返回資料

tg3 = tea(tg1,)

通過tg1解密tg3,得到token 和 refresh token

服務端: 接收到 tg2,可以通過db 中的account info 中的passwd 字段解密出 tg1,如果解密成功,證明登入成功,生成 token 和 refresh token ,並用tg1加密返回

token 的有效期 1天

refresh token 有效期 1個月

2、refresh登入

客戶端儲存refresh token 當token 失效後,可以用 refresh token 換取新的token 和 refresh token。

refresh_token介面接收傳參:

uid:使用者id

cltid:client id

refresh_token:

refresh_token介面返回資料:

3、通過mobile、email查詢uid

介面接收引數:

返回引數:

4、修改密碼

忘記密碼

忘記密碼流程:

1、使用者未登入,進入忘記密碼頁面,輸入手機號,傳送驗證碼

傳送簡訊驗證碼介面:

輸入:type : 驗證碼業務型別

mobile : 傳送的目的手機號

輸出:seq_id : 本次驗證碼事務的唯一seq

2、收到驗證碼,輸入新的密碼,傳送到服務端

客戶端收入驗證碼,生成md5(code),取前16位生成 秘鑰 ,對 使用者輸入的password 的s1做加密 encypt_pwd = tea(md5(code) , s1(password) )

設定密碼介面:

輸入:passwd:     encypt_pwd

seq_id : 步驟1中生成的 驗證碼的事物id

輸出:成功或者驗證碼失敗

3、服務端收到請求,做校驗檢查,通過則修改密碼

服務端接收到請求,通過seq_id獲取到驗證碼的爭取code,對 passwd 進行解密,如果成功則設定密碼,失敗告知客戶端驗證碼錯誤

重置密碼

重置密碼流程:

1、使用者輸入舊密碼、新密碼,提交到服務端

新密碼用舊密碼的s2加密(newpwd = tea(s2(oldpwd),newpwd)),傳遞到服務端

設定密碼介面:(介面需要校驗token)

輸入:newpwd:tea(s2(oldpwd),s2(newpwd))

uid: 使用者的uid

輸出:成功或失敗

2、服務端接收到請求,先驗證舊密碼是否正確,用舊密碼的s2解密出新密碼,解密成功,就儲存

5、註冊

註冊流程:

1、輸入手機號,傳送簡訊驗證碼

2、輸入驗證碼,輸入密碼,取密碼的s1,取輸入的code,得到 md5(code),取前16位作為秘鑰 生成encrypt_pwd + tea(md5(code) , s1(passwrod)),提交服務端

3、服務端接收到請求,取得爭取code 對 encrypt_pwd 做解密,如果解密成功,則註冊成功

註冊介面:

輸入:passwd:     encypt_pwd

seq_id : 步驟1中生成的 驗證碼的事物id

mobile : 手機號

輸出:註冊成功,返回uid、token、refresh token

6、使用者封禁

1、使用者資料增加狀態字段,通過狀態字段標示使用者狀態

如: status 字段,0 是正常,-5 是封禁狀態, -1是未啟用狀態, -2 是再啟用狀態

2、使用者封禁操作就是設定使用者狀態,並清除token,登入介面對使用者狀態最判斷,如果是封禁狀態則拒絕登陸,如果是再啟用狀態,需要手機驗證後置為正常狀態 

如何設計乙個安全的登入流程

登入是系統中最重要的乙個功能之一,登入成功就能擁有系統的使用權利,所以設計乙個安全的登入流程是十分必要的,那在一般登入中需要考慮哪些重要因素呢?我們一一列表一下。使用https協議進行傳輸,雖然麻煩,但是很強的保護措施。強制使用者使用有一定強度且複雜的密碼,必須要有大小寫加數字,長度在8位以上,杜絕...

後台登入流程設計

關於後台登入步驟的流程 1.後台登入控制器 registercontroller 1.getimagevalidate 方法說明 登入頁面,載入驗證碼 防止暴力破解 的時候,需要乙個key在伺服器端儲存驗證碼生成的數字值,這個時候在smart1controller控制器中,使用了accesskeyf...

關於登入 token 的設計

設計要點 token 中不要加入到期時間,因為每次有效請求,都要更新 token 的到期時間,如果把到期時間加入到 token 中,那麼每次請求就要生成新的 token 並且隨同請求資料返回給客戶端替換舊的 token,這樣實在是太麻煩了,也沒有必要吧 可以把 token 儲存在 redis 等快取...