我在google上面搜尋了一些針對app的使用者認證方案,也對比過傳統PC時代的cookie認證,覺得都不太合理,我想到一個方案,不知道是否合理?
需求大概是這樣的,使用者通過登入第三方,走oauth介面來登入我們的app。
大概的流程如下:
- 使用者先登入第三方,然後用戶端拿到使用者的資料,用https返回傳給服務端。其中,傳遞的資料如下:
{ “user_id”:”123123123” , “access_token”:”accesstokenstrng”, “platform”:”qq”, “platform_name”:”xxx”,}
2、服務端鑒權成功後,拿到使用者更進一步的資料,主動幫使用者建立一個使用者。
3、服務端接著把user_id、登入狀態相關資訊、動態產生的secret加密串,儲存到session之類的地方。
4、服務端把session_id、secret返回給用戶端,用戶端把這個secret存到記憶體裡面。
5、至此,建立使用者成功,結束https串連。
6、後續所有涉及到後端增刪改的請求,都走http協議。在發送資料時,用戶端先用secret對傳輸的資料做簽名,並把簽名signature、session_id一起帶過來。
7、服務端根據session_id找到使用者的資料,然後同樣用secret對資料進行簽名。如果兩者一樣,就證明資料是合法的。然後,就可以往下走常規的商務邏輯了。
這裡面又涉及到兩個問題:
1、用戶端和服務端初始的https是否必要?其實我完全可以把secret內建到app裡面。
2、我這種用secret對資料做簽名的做法,比起自己搞個公開金鑰私密金鑰走https,好像沒啥區別?
可能重複的問題:用PHP做伺服器介面用戶端用http協議POST訪問安全性一般怎麼做
回複內容:
我在google上面搜尋了一些針對app的使用者認證方案,也對比過傳統PC時代的cookie認證,覺得都不太合理,我想到一個方案,不知道是否合理?
需求大概是這樣的,使用者通過登入第三方,走oauth介面來登入我們的app。
大概的流程如下:
- 使用者先登入第三方,然後用戶端拿到使用者的資料,用https返回傳給服務端。其中,傳遞的資料如下:
{ “user_id”:”123123123” , “access_token”:”accesstokenstrng”, “platform”:”qq”, “platform_name”:”xxx”,}
2、服務端鑒權成功後,拿到使用者更進一步的資料,主動幫使用者建立一個使用者。
3、服務端接著把user_id、登入狀態相關資訊、動態產生的secret加密串,儲存到session之類的地方。
4、服務端把session_id、secret返回給用戶端,用戶端把這個secret存到記憶體裡面。
5、至此,建立使用者成功,結束https串連。
6、後續所有涉及到後端增刪改的請求,都走http協議。在發送資料時,用戶端先用secret對傳輸的資料做簽名,並把簽名signature、session_id一起帶過來。
7、服務端根據session_id找到使用者的資料,然後同樣用secret對資料進行簽名。如果兩者一樣,就證明資料是合法的。然後,就可以往下走常規的商務邏輯了。
這裡面又涉及到兩個問題:
1、用戶端和服務端初始的https是否必要?其實我完全可以把secret內建到app裡面。
2、我這種用secret對資料做簽名的做法,比起自己搞個公開金鑰私密金鑰走https,好像沒啥區別?
可能重複的問題:用PHP做伺服器介面用戶端用http協議POST訪問安全性一般怎麼做