使用Token作為憑證,從App免登陸跳轉到Web是否足夠安全?
我們有一個App,可以通過使用者名稱密碼登入我們的伺服器。
現在我們有一個需求,就是從app裡面開啟網站的一個連結。這個連結是需要登入才能開啟的。由於我們的app已經登入了伺服器,因此我們想從app裡面開啟這個連結時,不再讓使用者又登入一次。
我們參考了OAuth機制做了下面的方案,但是不知道:
- 是否夠安全?
- 把認證和授權分開來是否過度設計?
- 這個方案如果用在客戶端上,也就是說客戶端獲得access token以後,就可以憑access token訪問伺服器資源,是否夠全安?
請大神指教!
說明:
(1) 使用HTTPS保護明文傳送的密碼或者密碼的雜湊碼;
(2) Request Token存活時間很短;
(4) Access Token存活時間由各個業務系統定
補充一個典型流程的詳細描述:
我把流程描述得細一點。
(1) 客戶端App使用HTTPS GET,連結“認證伺服器”,提交使用者ID和密碼(明文);
(2) 認證伺服器驗證使用者ID和密碼正確,生成一個32位的隨機字串作為Request Token,返回給客戶端App,並在認證伺服器中把Request Token關聯到使用者ID;
(3) 客戶端使用HTTP GET連結到“授權伺服器”,提交Request Token;
(4) (5) (6) 授權伺服器拿Request Token到“認證伺服器”查詢,如果查到了userId,則生成一個Access Token,對應到UserId,並返回給客戶端App,同時要求“認證伺服器”銷燬Request Token;如果Request Token超過5分鐘沒有被使用,會自動被刪除;
(7) (8) 客戶端App開啟手機App瀏覽器,用瀏覽器向網站發起一個HTTP GET 請求,用Access Token做引數;
(9) (10) (11) 網站拿Access Token到授權伺服器查詢對應的UserId,如果找到了,則把瀏覽器請求的資料返回給瀏覽器;
2015.4.3更新:
我在知乎上看到 知友 @secloud 在這裡 幫你深入理解OAuth2.0協議 提到一個
IAM 服務,說是比較適合客戶端使用HTTP RESTful API去訪問伺服器資源的情況,可是我找了好久沒有找到怎麼實現IAM的資料。
倒是找到這篇:5 Keys To Web App Token
Authentication ,講怎麼使用Token來做Web和App通用的使用者身份認證。文中提到不能什麼都往OAuth上靠,OAuth的應用場景,是第三方認證。如果雲和端都是自有系統,就做簡單的Token驗證好了。我覺得這個結論挺靠譜的。