這是我的計劃(授權代碼流程)實現這種登錄/註冊邏輯。 (第三方僅提供了OAuth2 API)如何使用OAuth2實現第三方登錄/註冊?
首先SPA前端將發送GET請求第三方
GET https://www.example.com/oauth2
client_id=dummyclient
redirect_uri=https://mysite/callback
response_type=code
scope=openid
然後,如果用戶同意給他/她的OpenID mysite然後fronend會得到一個301 HTTP響應。
---> 301 https://mysite/callback?code=dummycode
然後,瀏覽器將網頁重定向到mysite/callback
,它會重新加載SPA以及其中可以通過SPA被捕獲,然後將代碼發送到真正的後端回調URL暴露的代碼。
GET https://mysite/api/real-callback?code=dummycode
當後臺獲取代碼,將代碼發送給第三方,以便交換access_token
。當後端獲得access_token
時,它將觸發API請求以獲取用戶的openid,然後決定是讓用戶登錄還是註冊爲新用戶。最後,它會向我們的SPA前端返回一個HTTP響應,其中包含access_token
,我的 OAuth2系統或401未經授權的響應。
所以我的問題是,如何證明真正的回調由我自己的客戶調用(因爲如果一些攻擊者得到我的前端嵌入client_id
那麼他就可以僞造的OAuth2請求和網絡釣魚的用戶同意。此後,攻擊者將得到一個有效的代碼,然後他將代碼發送回我真正的回調。最後,他將在我的系統中獲得用戶的access_token
。)如何在沒有最終用戶提供密碼等附加信息的情況下使用OAuth2進行身份驗證。
你沒有將真實回調URL作爲來自OAuth2服務器的重定向URL的原因是什麼?我沒有看到任何將驗證碼發送到SPA前端的理由。 –
@JánHalaša即使沒有這個步驟,只要我在第三方的OAuth2回調請求後發回系統的'access_token'到前端,安全問題依然存在。我設計真正的回調的原因是我想實現前端和後端之間的真正分離。 – bitweaver
你在SPA中需要什麼'access_token'? –