它實際上比你描述的要糟糕。任何後續用戶都可以訪問提供商的用戶帳戶(例如google/facebook等),而不僅僅是您的應用程序。
您是否找到處理此問題的好方法?我在下面提出了一些建議,但我希望有更好的選擇/正在準備中。
從我的角度來看,您所描述的是一個真正的問題和整個系統中的一個漏洞。使用asp.net MVC,正如您所指出的那樣,WebSecurity.Logout()不會將用戶從提供程序中註銷。
我會指出爲什麼我認爲這是一個問題後,我提供了幾個選項。這兩種解決方案的關鍵在於,如果用戶退出其提供商,那麼他們將無法再次登錄到您的網站而無需重新進行身份驗證,他們也不會離開提供商用戶帳戶。
將他們從他們的提供者處註銷。如果他們的供應商是Facebook,請按照the instructions at this answer。如果提供商是谷歌,您可以重定向到「https://accounts.google.com/Logout」。不幸的是,這有點笨重,並且在提供者之間會有所不同。
當用戶點擊「註銷」您的網站上,顯示一條消息,表明他們應該從他們的供應商註銷,然後直接向供應商的網站。例如,如果提供者是谷歌,然後當他們點擊註銷,顯示一個消息,如「請記住,從谷歌註銷」,然後引導他們到www.google.com。這實際上不會將它們註銷,但至少會保持一致。這是我使用的方法,直到我找到更好的東西。因爲它需要出來你的網站,但至少他們沒有被暴露於大安全漏洞是不理想的。
,我認爲離開登錄到提供商的用戶是壞是由下面的例子演示的理由: -
- 用戶是在公用計算機上。
- 用戶打開EmergencyIceCream(虛構)網站。
- 在EmergencyIceCream網站上,用戶選擇使用提供者(例如google/facebook)登錄。
- 用戶已訂購他們的緊急冰淇淋,並單擊註銷。
- 用戶被帶回EmergencyIceCream主頁。
- 用戶很高興他們已經註銷。
- BadUser來到電腦,無法相信他們的運氣,當他們去提供商的網站(如谷歌/臉譜),他們有權訪問和控制用戶的帳戶以及任何與用戶帳戶綁定的應用程序(包括EmergencyIceCream)。
我認爲應該有一個退出社會提供者的選項。我不確定這是否可以在OAuthWebSecurity背後完成,或者需要在open-id/oauth實現中進行更改。我不認爲讓代碼單獨註銷每個提供程序是一個非常好的選擇。我不同意這是oauth的工作方式,我們應該接受它或使用我們自己的認證和授權。作爲OAuthWebSecurity功能的使用者來簡化我的應用程序的登錄過程,現在我有更多的工作要做,並削弱了用戶的安全性。此外,註銷提供商解決問題的事實表明有辦法解決此問題。
你好嗎。是的,任何人在你的電腦上使用THAT瀏覽器都會自動登錄。 –
你如何解決它? –
OAuth是基於Cookie的。如果您仍然在瀏覽器上使用有效的Cookie,則會進行身份驗證。如果Cookie被清理或過期,您需要再次向提供商進行身份驗證。如果您沒有從身份驗證提供程序註銷,則會一直登錄,直到cookie過期。 – TheBigCheese